なぜですか
>>> len('™')
>>> 3
python 2.xで?
1文字と見なされるようにすばやく修正するにはどうすればよいですか(Python 3.xのように?)
なぜですか
>>> len('™')
>>> 3
python 2.xで?
1文字と見なされるようにすばやく修正するにはどうすればよいですか(Python 3.xのように?)
端末のエンコーディングはUTF8に設定されています。エンコードされた文字のバイト数を数えています。
>>> '™'
'\xe2\x84\xa2'
>>> len('™')
3
バイトの代わりにUnicodeを使用して文字をカウントします。
>>> u'™'
u'\u2122'
>>> len(u'™')
1
または端末エンコーディングからデコードします。
>>> import sys
>>> '™'.decode(sys.stdin.encoding)
u'\u2122'
Python 3では、文字列はunicode
値であり、Python 2str
タイプの名前が変更されていbyte
ます(入力は基本的b'™'
にPython 3と同じです)。
PythonとUnicodeについて読みたいと思うかもしれません:
Python Unicode HOWTO
NedBatchelderによる実用的なUnicode
絶対最小すべてのソフトウェア開発者は絶対に、積極的にUnicodeと文字セットについて知っている必要があります(言い訳はありません!) Joel Spolsky