Linux运行main.py报第46行存在非UTF-8代码无编码声明如何解决
问题原因说明
- Windows中文环境下默认文本文件编码为GBK/GB2312,Python在Windows运行时会自动适配系统默认编码解析文件,因此不会触发报错
- Linux系统默认全局编码为UTF-8,若Python解析时没有找到显式的编码声明,就会用UTF-8读取GBK编码的文件,碰到中文字符就会抛出编码错误。报错指向的行号不一定是实际存在非UTF-8字符的位置,只是解析到对应位置时触发了报错
解决方法
- 方案1:添加显式编码声明(最快解决)
直接在Python文件的第一行或第二行添加编码声明即可:
如果文件保持GBK编码,添加# -*- coding: gbk -*-
如果文件后续会转为UTF-8编码,添加# -*- coding: utf-8 -*-
注意该声明必须放在文件最顶部,前面不能有其他可执行代码 - 方案2:统一文件编码为UTF-8(更推荐,跨平台兼容性最好)
用编辑器打开main.py,选择「保存为」功能,编码格式选择UTF-8,保存后替换服务器上的原文件即可。后续所有Python文件都默认存为UTF-8,就不会再出现跨平台编码问题 - 方案3:运行时指定编码(仅临时测试用)
执行脚本前先在Linux终端执行export PYTHONIOENCODING=utf-8,之后再运行python main.py即可临时生效
注意事项
报错指向第46行
@client.command()不代表该行存在问题,编码解析错误的行号通常是解析器碰到非法字符后停止的位置,非法字符大概率存在于46行之前的注释、字符串常量等包含中文的位置。
内容的提问来源于stack exchange,提问作者Georgi Koynov
相关产品推荐
相关产品推荐

