重複の可能性:
Pythonが特殊文字を使用すると、間違った長さの文字列を返す
windows-1251
たとえば、ファイルから多言語文字列を読み取りs="qwe абв"
(ロシア語の2番目の部分)、次に:
for i in s.decode('windows-1251').encode('utf-8').split():
print i, len(i)
そして私は得る:
qwe 3
абв 6
なんてこった、なぜ?o_O
重複の可能性:
Pythonが特殊文字を使用すると、間違った長さの文字列を返す
windows-1251
たとえば、ファイルから多言語文字列を読み取りs="qwe абв"
(ロシア語の2番目の部分)、次に:
for i in s.decode('windows-1251').encode('utf-8').split():
print i, len(i)
そして私は得る:
qwe 3
абв 6
なんてこった、なぜ?o_O
プログラミング言語では、文字列は実際にはバイトのシーケンスであるため、文字列を文字のシーケンスと常に見なすことができるとは限りません。すべての文字または記号を8ビットで格納することはできません。文字エンコードは、複数のバイトを1つの文字に結合するためのいくつかのルールを作成します。
utf-8でエンコードされた文字列の場合、'абв'
3文字を表す6バイトがあります。バイト数ではなく文字数をカウントする場合は、Unicode文字列から長さを取得していることを確認してください。
>>> print "абв"
абв
>>> print [char for char in "абв"]
['\xd0', '\xb0', '\xd0', '\xb1', '\xd0', '\xb2']
それが理由です :)