执行django-admin makemessages -l ar遇UnicodeDecodeError及html.py生成问题
解决
django-admin makemessages -l ar的UTF-8解码错误 根据你描述的情况,这个错误核心是Makemessages工具在读取某个文件时,遇到了非UTF-8编码的字符(字节0xe9是法语字符é的Latin-1/ISO-8859-1编码),导致解码失败。结合你提到的自动生成html.py文件的情况,给你以下具体解决思路:
1. 先清理可疑的*.html.py中间文件
你提到每个HTML模板会生成对应的html.py文件,这些文件里包含非标准的X/B字符和待翻译文本,看起来像是某种未完成的中间产物(正常Django makemessages不会生成这类文件)。先把模板文件夹里所有*.html.py文件删除,它们很可能是导致编码冲突的源头,清理后再重新执行命令试试。
2. 定位并修复编码错误的模板文件
错误提示里的UnicodeDecodeError指向字节0xe9,这说明某个模板文件用了Latin-1编码而非UTF-8。你可以:
- 先缩小排查范围:用
--app参数只处理单个app的文件,比如django-admin makemessages -l ar --app myapp,逐步定位是哪个app下的模板出问题。 - 检查并转换文件编码:找到包含法语字符(比如
Les appels à projet里的é)的HTML模板,用VS Code、Sublime等编辑器打开,查看右下角的编码标识,将其转换为UTF-8编码后保存。
3. 给Makemessages指定编码(临时兼容方案)
如果某些文件确实需要保留原有编码,你可以在执行命令时通过--encoding参数指定对应的编码,比如针对Latin-1编码的文件:
django-admin makemessages -l ar --encoding ISO-8859-1
不过更推荐统一将所有模板文件转为UTF-8编码,避免后续再出现编码类问题。
4. 检查现有阿拉伯语PO文件的完整性
你2个月前创建的ar.po文件可能存在编码问题或语法错误,导致Makemessages更新时出错。可以用gettext自带的工具检查:
msgfmt --check locale/ar/LC_MESSAGES/django.po
如果检查出错误,修复后再重新执行makemessages命令。
5. 跳过特定文件快速排查问题
如果一时找不到问题文件,可以用--exclude参数临时跳过某个可疑文件,比如:
django-admin makemessages -l ar --exclude templates/index.html
如果命令能正常执行,就说明被跳过的文件是问题所在,再针对性修复它的编码。
内容的提问来源于stack exchange,提问作者D. Ahmed
相关产品推荐
相关产品推荐

