Ich arbeite mit Djangos Internationalisierungsfunktionen, um Übersetzungszeichenfolgen für eine Webanwendung zu generieren.UnicodeError Fehler beim Aufruf von Django i18n makemessages Befehl
Ein Problem entsteht, wo ich versuche, und rufen makemessages
, und die vorhandene Sprache .po
Datei enthält ein Sonderzeichen (wie $
, £
, etc).
Wo einer dieser existiert, versucht makemessages die vorhandene .po
Datei zu laden und zu entschlüsseln. Wenn es dies tut, ich erhalte eine Fehlermeldung:
Traceback (most recent call last):
File "manage.py", line 18, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 354, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 346, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 394, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 445, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/makemessages.py", line 325, in handle
self.write_po_file(potfile, locale)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/makemessages.py", line 458, in write_po_file
msgs, errors, status = gettext_popen_wrapper(args)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/makemessages.py", line 51, in gettext_popen_wrapper
stdout = stdout.decode(stdout_encoding)
File "/usr/lib/python2.7/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa2' in position 2105: ordinal not in range(128)
Ich habe versucht, zurück durch die Zurückverfolgungs hier zu graben, aber ich bin ratlos, was passiert.
Es scheint, als ob Django die bestehenden .po
Datei als UTF8
zu entschlüsseln versucht, aber dann, wenn es neu kodiert, es mit einem ASCII
Codec.
Alle Einsichten, was falsch ist, würden massiv geschätzt werden.
Edit:
- OS: Ubuntu 15.10 und OS X 10.11.6
- Python: 2.7.10 und 2.7.11
- Django: 1.8.14
- Six: 1.10.0
Ich habe versucht, neu zu installieren Django/Sechs wie vorgeschlagen, aber der Fehler ist immer noch da.
Ubuntus localedef --list-archive
:
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
Content-type der problematischen Übersetzungsdatei:
"Content-Type: text/plain; charset=UTF-8\n"
http://stackoverflow.com/questions/22106777/unicode-issue-with-makemessages-all-django-1-6-2-python-3-3 – trinchet
Versuchen Sie dies: 'LC_CTYPE = en_US.UTF-8 python manage.py makemessages'; funktioniert es? –
@ nobe4: Macht es einen Unterschied, wenn Sie es mit 'LC_CTYPE = en_US.UTF-8 python manage.py makemessages' ausführen? Und, BTW, was ist Ihr Betriebssystem und Version? –