Я хочу преобразовать строки UTF-8 с помощью встроенных функций такой в качестве верхних () и использовать для своей выгоды ().
Например:
>>> mystring = "işğüı"
>>> print mystring.upper()
Işğüı # should be İŞĞÜI instead.
Как я могу зафиксировать это?
Не выполнять действия с закодированными строками; сначала декодировать в юникод
.
>>> mystring = "işğüı"
>>> print mystring.decode('utf-8').upper()
IŞĞÜI
На самом деле, в качестве общей стратегии лучше всего всегда сохранять текст в формате Unicode, когда он находится в памяти: декодировать его в момент ввода и кодировать именно в тот момент, когда вам нужно его вывести, если есть конкретная кодировка. требования во время ввода и / или ввода.
Даже если вы не решите принять эту общую стратегию (а вам следует это сделать!), Единственный надежный способ выполнить требуемую задачу - это декодировать, обрабатывать, снова кодировать - никогда не работать с закодированными формами. . То есть: [
mystring = "işğüı"
print mystring.decode('utf-8').upper().encode('utf-8')
] при условии, что вы ограничены кодированными строками при назначении и для целей вывода. (Ограничение вывода, к сожалению, реалистично, ограничение присваивания - нет - просто выполните mystring = u "işğüı"
, сделав его Unicode с самого начала, и сэкономьте хотя бы .decode
вызов! -)