Не-английский символ меняется на "."персонаж в Linux - PullRequest
0 голосов
/ 05 мая 2011

Я пытаюсь создать «Языковой файл» для добавления локализации в мое приложение Django.

Проблема в том, что когда в переводимом тексте есть неанглийские символы, они заменяются на «.»персонаж и Джанго жалуются на это, выдавая ошибку.

Например:

English                        German 
Change Password                Passwort ändern

Так что здесь ä заменяется на .

Я не понимаю, почемуя не могу вставить этот текст в мой текстовый файл.Я могу вставить его в терминал, но не в файл, когда открываю через vi

Я использую linux 2.6.32 на встроенном устройстве.

Сообщение об ошибке, полученное вДжанго во время подготовки языкового файла:

locale/de/LC_MESSAGES/django.po:472:70: invalid multibyte sequence

Я понятия не имею, почему это происходит так.Кто-нибудь может предложить какое-нибудь решение?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 06 мая 2011

Хорошо, я решил свою проблему.Я получаю ошибку недопустимой многобайтовой последовательности, потому что проблема была в том, что .po не был закодирован должным образом.

Я мог бы подтвердить это, выполнив следующую команду:

file -i django.po

Это дало вывод, что тип кодировки файла был ISO-8859-1

Итак, я преобразовалфайл в «UTF-8» с помощью следующей команды:

iconv --from-code=ISO-8859-1 --to-code=UTF-8 django.po > django_utf8.po

Затем заменил старый файл django.po на новый, и «makemessages» и «compilemessages» работали как шарм.

Спасибо всем выше за ваш ответ.

Надеюсь, это поможет кому-то в будущем!

0 голосов
/ 05 мая 2011

Кажется, у вас есть некоторые несоответствия в кодировках. В настоящее время Linux обычно использует utf-8, но у вас все еще может быть установлен устаревший iso-8859- n , и это может вызвать проблемы. Также django должен знать, какую кодировку интерпретировать файл.

  • Vim имеет опции encoding (которая задает внутреннюю кодировку и использует по умолчанию для двух других), fileencoding (которая задает кодировку для чтения и записи конкретного файла в (для каждого буфера)) и termencoding (указывает кодировку, используемую для отображения на терминале; она не используется в графической версии). Он позволяет указать fileencoding для открываемого файла, добавив флаг ++enc= к команде :edit. Таким образом, вы открываете файл, например как :e ++enc=utf-8 file.txt. Попробуйте различные комбинации, пока персонаж не появится правильно, и vim не будет жаловаться, что что-то не может быть преобразовано. Чем вы будете знать, какую кодировку вы используете.
  • В python по умолчанию только символы ascii транслируются между строками байтов (str) и строками Unicode (unicode). Если вы хотите открыть файл в другой кодировке и интерпретировать строки, вы должны открыть его с явным кодированием пакета codecs.

Если он открыт где-то в django, вам придется выяснить, как определить кодировку.

...