Должно ли мое веб-приложение на Python использовать Юникод для всех строк? - PullRequest
6 голосов
/ 06 мая 2009

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

С другой стороны, кажется большой боль, что все эти лишние летают повсюду.

В чем будет проблема, если я этого не сделаю?

Есть ли какие-либо проблемы, которые возникнут, если я сделаю это?

Я сейчас использую Pylons в качестве основы.

Ответы [ 4 ]

20 голосов
/ 06 мая 2009

Вы можете избежать u'' в Python 2.6, выполнив:

from __future__ import unicode_literals

Это сделает 'string literals' объектами Unicode, как в Python 3;

10 голосов
/ 06 мая 2009

В Python 3 все строки в Unicode. Таким образом, вы можете подготовиться к этому, используя u'' строки везде, где вам нужно, а затем, когда вы в конечном итоге обновитесь до Python 3 с помощью инструмента 2to3, все u s исчезнут. И вы окажетесь в лучшем положении, потому что вы уже протестировали свой код со строками Unicode.

См. Текст Vs. Данные вместо Unicode Vs. 8 бит для получения дополнительной информации.

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

В чем будет проблема, если я этого не сделаю?

Я - западный житель Японии, поэтому из первых рук увидел, что нужно для работы с не-ASCII символами. Проблема, если вы не используете строки Unicode, состоит в том, что ваш код будет разочарован теми частями мира, которые используют что-либо кроме A-Z. Наша компания испытывает большое разочарование, заставляя определенное веб-программное обеспечение выполнять символы японского языка без каких-либо проблем.

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

"Gotchas":

  1. Убедитесь, что на выходных веб-страницах правильно указана используемая кодировка (например, используется заголовок кодирования содержимого), а затем правильно закодируйте все строки Unicode на выходе. Unicode-строки в Python 3 - отличное улучшение, чтобы сделать это правильно.

  2. Делайте все со строками Unicode и конвертируйте в определенную кодировку только в последний момент, когда выполняете вывод. Другие языки, такие как PHP, подвержены ошибкам при манипулировании Unicode, например Форма UTF-8. Скажем, вы должны усечь строку Юникода. Если он находится в форме UTF-8 внутри, есть риск, что вы сможете отрубить многобайтовый символ на полпути, что приведет к выводу мусора. Использование Python строк Unicode внутренне затрудняет совершение этих ошибок.

1 голос
/ 17 сентября 2009

Использование Юникода внутри - это хороший способ избежать проблем с не-ASCII символами. Преобразование на границах вашего приложения (входящие данные в Unicode, исходящие данные в UTF-8 или что-то еще). Пилоны могут сделать преобразование для вас во многих случаях: например, контроллеры могут безопасно возвращать Unicode-строки; Модели SQLAlchemy могут объявлять столбцы Unicode.

Относительно строковых литералов в вашем исходном коде: префикс u обычно не требуется. Вы можете безопасно смешивать объекты str, содержащие ASCII, с объектами Unicode. Просто убедитесь, что все ваши строковые литералы либо в чистом ASCII, либо в "unicode".

...