Проблема кодирования между Django и клиентом - PullRequest
0 голосов
/ 09 сентября 2011

Я пытаюсь отправить латинские символы (é, è ...) на клиентскую сторону, используя Django, и я не могу заставить его работать.В Django я пытался писать прямо латинские символы в моих файлах python, но у меня были ошибки.Затем я использовал Unicode (пишу «Soci \ u00E9t \ u00E9» для «Société»), но при отправке его на клиентскую сторону я получаю необработанные символы Unicode.

Может кто-нибудь помочь?

Julien

Ответы [ 2 ]

1 голос
/ 09 сентября 2011

Обычно я бы воздерживался от добавления любых символов, не закодированных в ascii, в исходный код.

Несмотря на то, что интерпретатор python будет учитывать исходный файл с заголовком UTF-8, проблема заключается в том, что текстовые редакторы, оболочки, операционные системы и некоторые разработчики, не имеющие отношения к UTF-8, в конечном итоге будут повреждены Ваши тщательно обработанные строки Unicode.

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

Вы почти у цели с вашей экранированной строкой Юникода.

В python вам просто нужно поставить перед собой.

т.е.. u'Soci \ u00E9t \ u00E9'

В противном случае python будет рассматривать большинство символов, перечисленных выше, как буквенные символы, а не как предполагаемые escape-символы Юникода.

Простой способ проверить правильность вашей строки в кодировке Unicode или двоичной строки (которая представляет собой строку без u перед ней) - запустить интерпретатор python и напечатать его:

>>> print 'Soci\u00E9t\u00E9'
Soci\u00E9t\u00E9           #ewwwwwww
>>> print u'Soci\u00E9t\u00E9'
Société                     #yay!!!

Примечание. Для вышеупомянутого теста ваша оболочка лучше поддерживает UTF-8 (если вы вошли локально на Mac, вероятно, так и есть) ... в противном случае вывод на печать будет бессмысленным. Это нормально, равно как и правильная тарабарщина (т. Е. Ваша входная строка была отформатирована в идеальном смысле).

Если у вас нет промежуточного программного обеспечения или других методов, которые неправильно работают с юникодом между вашей функцией представления и рендерингом, Django должен правильно выводить вашу строку юникода просто отлично.

Кстати, хорошая практика - ставить перед вами все ваши строки. «Это тест» так же хорошо, как «это тест».

Разница в том, что любые операции по обработке строк, включающие строку, обозначенную юникодом (например, u'this + "test"), сообщают Python, что он знает о юникоде.

Да, в некотором смысле, python по умолчанию является юникодом немым. Как некоторые текстовые редакторы! :)

'u', волшебный соус

0 голосов
/ 09 сентября 2011

Проверьте кодировку файлов для ваших файлов Python. Убедитесь, что они UTF-8. А также убедитесь, что на стороне клиента также есть UTF-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...