9

upper() や capitalize() などの組み込み関数を使用して、UTF-8 文字列を変換したいと考えています。

例えば:

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

どうすればこれを修正できますか?

4

2 に答える 2

14

エンコードされた文字列に対してアクションを実行しないでください。最初にデコードしunicodeます。

>>> mystring = "işğüı"
>>> print mystring.decode('utf-8').upper()
IŞĞÜI
于 2010-02-23T01:00:23.713 に答える
9

実際には、一般的な戦略として、テキストがメモリに格納されたら常に Unicode として保持するのが最善です。入力時に特定のエンコーディング要件がある場合は、入力時にデコードし、出力する必要があるときに正確にエンコードします。および/または入力時間。

この一般的な戦略を採用することを選択しなくても (そうすべきです!)、必要なタスクを実行するための唯一の適切な方法は、デコード、処理、再度エンコードすることです。エンコードされたフォームで作業することは決してありません。すなわち:

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

割り当て時および出力目的でエンコードされた文字列に制限されていると仮定します。(出力制約は残念ながら現実的ですが、代入制約は現実的ではありません -- を実行しmystring = u"işğüı"、最初からユニコードにし、少なくとも.decode呼び出しを節約してください!-)

于 2010-02-23T01:05:43.640 に答える