UTF-8 и верхний () - PullRequest
       19

UTF-8 и верхний ()

9 голосов
/ 23 февраля 2010

Я хочу преобразовать строки UTF-8, используя встроенные функции, такие как upper () и capitalize ().

Например:

>>> mystring = "işğüı"
>>> print mystring.upper()
Işğüı  # should be İŞĞÜI instead.

Как я могу это исправить?

Ответы [ 2 ]

14 голосов
/ 23 февраля 2010

Не выполнять действия с закодированными строками; сначала декодировать до unicode.

>>> mystring = "işğüı"
>>> print mystring.decode('utf-8').upper()
IŞĞÜI
9 голосов
/ 23 февраля 2010

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

Даже если вы не решите принять эту общую стратегию (и вам следует!), Единственный надежный способ выполнить требуемую задачу - это все равно декодировать, обрабатывать, кодировать снова - никогда не работать с закодированными формами , I.e.:

mystring = "işğüı"
print mystring.decode('utf-8').upper().encode('utf-8')

при условии, что вы ограничены закодированными строками при назначении и для целей вывода. (Выходное ограничение, к сожалению, реалистично, ограничение присваивания - нет, просто выполните mystring = u"işğüı", сделав его юникодным с самого начала, и сохраните себя хотя бы при вызове .decode! -)

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