0

重複の可能性:
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

4

2 に答える 2

3

プログラミング言語では、文字列は実際にはバイトのシーケンスであるため、文字列を文字のシーケンスと常に見なすことができるとは限りません。すべての文字または記号を8ビットで格納することはできません。文字エンコードは、複数のバイトを1つの文字に結合するためのいくつかのルールを作成します。

utf-8でエンコードされた文字列の場合、'абв'3文字を表す6バイトがあります。バイト数ではなく文字数をカウントする場合は、Unicode文字列から長さを取得していることを確認してください。

于 2012-10-07T06:21:58.813 に答える
2
>>> print "абв"
абв
>>> print [char for char in "абв"]
['\xd0', '\xb0', '\xd0', '\xb1', '\xd0', '\xb2']

それが理由です :)

于 2012-10-07T06:34:46.850 に答える