Я должен использовать строку Unicode по умолчанию?

Мое самое регулярное слушает:

  • Отряд Java
  • Переполнение стека Радио
  • Разработки программного обеспечения
  • Гибкий Подкаст Инструментария (неустойчивый)

кроме того, если Вы не услышали OOPSLA 2 007 подкастов (сессии представления ведущих идей / основные зарегистрированные сессии и podcasted), они определенно стоят того, чтобы слушать, хотя это - довольно короткий промежуток времени.

20
задан FerranB 26 September 2010 в 00:37
поделиться

6 ответов

Из моей практики - юникод.

В начале одного проекта мы использовали обычные строки, однако наш проект рос, мы внедряли новые функции и использовали новые сторонние библиотеки. В этой неразберихе со строкой, отличной от Unicode / unicode, некоторые функции начали давать сбой. Мы начали тратить время на локализацию этих проблем и их устранение. Однако некоторые сторонние модули не поддерживают юникод и перестают работать после того, как мы перешли на него (но это скорее исключение, чем правило).

Также у меня есть некоторый опыт, когда нам нужно было переписать некоторые сторонние модули (например, SendKeys), потому что они не поддерживали Unicode. Если бы это было сделано в юникоде с самого начала, было бы лучше :)

Так что я думаю, что сегодня мы должны использовать юникод.

PS Все, что беспорядок вверху - это только мое болтливое мнение :)

19
ответ дан 29 November 2019 в 23:00
поделиться

Да, использовать юникод.

Некоторые подсказки:

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

  2. [Забудьте об этом, мои объяснения сделали его еще более запутанным. Это проблема только при переносе на Python 3, тогда вы можете об этом позаботиться.]

  3. Распространенные ошибки новичков Python с Unicode (не говоря уже о том, что вы новичок, но это может быть прочитано новичками): не путайте кодировку и декодировать. Помните, что UTF-8 - это ENcoding, поэтому вы кодируете Unicode в UTF-8 и DEcode из него.

  4. Не поддавайтесь искушению установить кодировку по умолчанию в Python (путем setdefaultencoding в sitecustomize.py или аналогичной) для чего угодно вы используете больше всего. Это просто вызовет проблемы, если вы переустановите или перейдете на другой компьютер, или вам вдруг понадобится использовать другую кодировку. Будьте ясны.

  5. Помните, что не вся стандартная библиотека Python 2 принимает Unicode. Если вы скармливаете метод Unicode, и он не работает, но должен, попробуй скормить ascii и посмотри. Примеры: urllib.urlopen (), которая завершается неудачно с бесполезными ошибками, если вы даете ему объект Unicode вместо строки.

Хм. Это все, о чем я могу думать сейчас!

13
ответ дан 29 November 2019 в 23:00
поделиться

Когда вы задаете этот вопрос, я полагаю, что вы используете Python 2.x.

Python 3.0 довольно сильно изменился в строковом представлении, и теперь весь текст является Unicode.
Я бы выбрал Unicode в любом новом проекте - способом, совместимым с переходом на Python 3.0 (см. подробности ).

13
ответ дан 29 November 2019 в 23:00
поделиться

Последовательное использование строк Unicode в Python 2.x может быть непростым - будь то потому, что кто-то случайно использует более естественное str (blah) там, где они имели в виду unicode (бла) , забывая префикс u в строковых литералах, несовместимость сторонних модулей - что угодно. Поэтому в Python 2.x используйте Unicode только в том случае, если это необходимо, и вы готовы обеспечить хорошее покрытие модульных тестов.

Однако если у вас есть возможность использовать Python 3.x, вам не нужно беспокоиться - строки будет Unicode без дополнительных усилий.

6
ответ дан 29 November 2019 в 23:00
поделиться

Дополнение к комментарию Михайла Я бы сказал: используйте Unicode, так как это будущее. В Python 3.0 не будет Unicode, и, насколько я знаю, все префиксы "U" будут создавать проблемы, поскольку они также исчезли.

4
ответ дан 29 November 2019 в 23:00
поделиться

Если вы имеете дело с сильно ограниченным объемом памяти или дискового пространства, используйте строки ASCII. В этом случае вам следует дополнительно написать свое программное обеспечение на C или еще более компактном:)

2
ответ дан 29 November 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: