执行Django makemessages命令时遭遇UTF-8解码错误求助
错误提示中的UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfe通常和gettext工具输出编码、系统环境编码,或locale目录下的现有文件编码有关,以下是几个可行的解决方向:
强制指定命令编码参数
执行makemessages时明确指定编码,覆盖默认设置:python manage.py makemessages -l [你的语言代码] --encoding=utf-8比如针对中文:
python manage.py makemessages -l zh_CN --encoding=utf-8检查并转换locale目录下的现有文件
之前生成的.po或.mo文件可能带有UTF-16 BOM(字节0xfe通常是UTF-16LE的BOM标识),用文本编辑器打开这些文件,确认编码为UTF-8且无BOM,若不是则重新保存为UTF-8无BOM格式。调整系统命令行编码(Windows环境)
Windows默认命令行编码为GBK,可能导致gettext输出编码不兼容,先切换到UTF-8编码再执行命令:chcp 65001 python manage.py makemessages -l zh_CN排除非项目文件目录
makemessages可能遍历到虚拟环境、缓存目录中的非UTF-8文件,用--exclude参数排除这些目录:python manage.py makemessages -l zh_CN --exclude=myvenv --exclude=__pycache__ --exclude=static设置Python IO编码环境变量
运行命令前设置环境变量,强制Python使用UTF-8处理输出:# Windows cmd set PYTHONIOENCODING=utf-8 # Linux/macOS export PYTHONIOENCODING=utf-8之后再执行makemessages命令。
验证gettext工具的输出编码
手动运行gettext的xgettext命令测试输出编码,比如:xgettext --version若输出包含非UTF-8字符,可能需要更新或重新安装gettext工具,确保其输出为UTF-8。
内容的提问来源于stack exchange,提问作者Emre Türkmen

