Как перенести проект Python 2.6 в UTF-8? - PullRequest
4 голосов
/ 18 марта 2011

Мы переходим от latin1 к UTF-8 и имеем 100 000 строк кода на Python.

Плюс я новичок в питоне (ха-ха-ха!).

Я уже знаю, что функция str() не работает при получении Unicode, поэтому мы должны использовать unicode() вместо него с почти таким же эффектом.

Каковы другие "опасные" места кода?

Существуют ли основные рекомендации / алгоритмы перехода на UTF-8? Можно ли написать автоматический «преобразователь кода»?

Ответы [ 3 ]

4 голосов
/ 18 марта 2011

str и unicode являются классами, а не функциями.Когда вы вызываете str(u'abcd'), вы инициализируете новую строку, которая принимает 'abcd' в качестве переменной.Так уж получилось, что str() может использоваться для преобразования строки любого типа в ascii str.

Другие области, на которые следует обратить внимание, - это чтение из файла / ввода или в основном все, чтополучить как строку из функции, которая не была написана для Unicode.

Наслаждайтесь:)

2 голосов
/ 18 марта 2011

Можно ли написать автоматический «преобразователь кода»?=)

Нет.str и unicode - это два разных типа, которые имеют разные цели.Вы не должны пытаться заменить каждое вхождение строки байтов строкой Unicode, ни в Python 2, ни в Python 3.

Продолжайте использовать строки байтов для двоичных данных.В частности, все, что вы записываете в файл или сетевой сокет, это байты.И используйте строки Unicode для текста, обращенного к пользователю.

Между ними находится серая область внутренних строк символов ASCII, которые в равной степени могут быть байтами или Unicode.В Python 2 это обычно байты, в Python 3 обычно Unicode.Если вы готовы ограничить свой код Python 2.6+, вы можете пометить свои строки с определенными байтами как b'' и bytes, строки с определенными символами как u'' и unicode и использовать '' иstr для строк «независимо от типа строки по умолчанию».

0 голосов
/ 18 марта 2011

Один из способов быстрого преобразования Python 2.x для использования кодировки по умолчанию UTF-8 - это установить кодировку по умолчанию . У этого подхода есть свои недостатки - прежде всего, он меняет кодировку для всех библиотек, а также для вашего приложения, поэтому используйте его с осторожностью. Моя компания использует эту технику в наших производственных приложениях, и она нам подходит. Он также совместим с Python 3, который по умолчанию использует кодировку UTF-8. Вам все равно придется изменить ссылки с str() на unicode(), но вам не нужно будет явно указывать кодировку с .decode() и encode().

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