Skip to main content
 首页 » 编程设计

python之如何修复 Django Translation ASCII 解码错误

2024年08月21日35TianFang

我有这个 django 网站从 locale/lc_messages/django.po 和 django.mo 文件将英语翻译成德语。但是,当我尝试翻译德语字母如 ü 和 ä 时,它给了我错误

'ascii' codec can't decode byte 0xc3 in position 7: ordinal not in range(128) 

据我所知,django 正试图通过 ASCII 解码 unicode 字符,这是不可能的。但我该如何解决这个问题?我应该在哪里设置 django 通过 utf-8 解码而不是通过 ASCII 解码。如果我错了,请告诉我。

回溯:

DjangoUnicodeDecodeError at /de/ 
'ascii' codec can't decode byte 0xc3 in position 7: ordinal not in range(128). You passed in <django.utils.functional.__proxy__ object at 0x0000000005EB40B8> (<class 'django.utils.functional.__proxy__'>) 
Request Method: GET 
Request URL:    http://127.0.0.1:8000/de/ 
Django Version: 1.10.1 
Exception Type: DjangoUnicodeDecodeError 
Exception Value:     
'ascii' codec can't decode byte 0xc3 in position 7: ordinal not in range(128). You passed in <django.utils.functional.__proxy__ object at 0x0000000005EB40B8> (<class 'django.utils.functional.__proxy__'>) 
Exception Location: C:\Users\deybala1\AppData\Local\Continuum\Anaconda2\lib\site-packages\django\utils\encoding.py in force_text, line 88 
Python Executable:  C:\Users\deybala1\AppData\Local\Continuum\Anaconda2\python.exe 
Python Version: 2.7.11 
Python Path:     
['C:\\Users\\deybala1\\Documents\\pe-locator', 
 'C:\\Users\\deybala1\\AppData\\Local\\Continuum\\Anaconda2\\lib\\site-packages\\pyexcel-0.2.3-py2.7.egg', 
 'C:\\Users\\deybala1\\AppData\\Local\\Continuum\\Anaconda2\\lib\\site-packages\\django_registration-2.1.2-py2.7.egg', 
 'C:\\Users\\deybala1\\AppData\\Local\\Continuum\\Anaconda2\\lib\\site-packages\\django_http_proxy-0.4.3-py2.7.egg', 
 'C:\\Users\\deybala1\\AppData\\Local\\Continuum\\Anaconda2\\lib\\site-packages\\django_redis-4.4.4-py2.7.egg', 
 'C:\\Users\\deybala1\\AppData\\Local\\Continuum\\Anaconda2\\lib\\site-packages\\django_redis_sessions-0.5.6-py2.7.egg', 
 'C:\\Users\\deybala1\\AppData\\Local\\Continuum\\Anaconda2\\python27.zip', 
 'C:\\Users\\deybala1\\AppData\\Local\\Continuum\\Anaconda2\\DLLs', 
 'C:\\Users\\deybala1\\AppData\\Local\\Continuum\\Anaconda2\\lib', 
 'C:\\Users\\deybala1\\AppData\\Local\\Continuum\\Anaconda2\\lib\\plat-win', 
 'C:\\Users\\deybala1\\AppData\\Local\\Continuum\\Anaconda2\\lib\\lib-tk', 
 'C:\\Users\\deybala1\\AppData\\Local\\Continuum\\Anaconda2', 
 'c:\\users\\deybala1\\appdata\\local\\continuum\\anaconda2\\lib\\site-packages\\sphinx-1.3.5-py2.7.egg', 
 'c:\\users\\deybala1\\appdata\\local\\continuum\\anaconda2\\lib\\site-packages\\setuptools-20.3-py2.7.egg', 
 'C:\\Users\\deybala1\\AppData\\Local\\Continuum\\Anaconda2\\lib\\site-packages', 
 'C:\\Users\\deybala1\\AppData\\Local\\Continuum\\Anaconda2\\lib\\site-packages\\win32', 
 'C:\\Users\\deybala1\\AppData\\Local\\Continuum\\Anaconda2\\lib\\site-packages\\win32\\lib', 
 'C:\\Users\\deybala1\\AppData\\Local\\Continuum\\Anaconda2\\lib\\site-packages\\Pythonwin'] 
Server time:    Fr, 28 Okt 2016 04:58:23 -0500 
Unicode error hint 
 
The string that could not be encoded/decoded was: ne pr��fung 

这是我来自 django.po 的 msgid 和 msgstr

#: .\app\templates\app\layout.html:47 
msgid "Take Exam" 
msgstr "Eine prüfung anlegen" 

请您参考如下方法:

找到解决方案,必须将所有 .po 文件中的 header 放在顶部。

"MIME-Version: 1.0\n" 
"Content-Type: text/plain; charset=UTF-8\n" 
"Content-Transfer-Encoding: 8bit\n" 
"Plural-Forms: nplurals=2; plural=(n != 1);\n" 

感谢大家的帮助。使用 poedit 处理 .po 文件是更好的解决方案