>>> c='中文'
>>> c
'\xe4\xb8\xad\xe6\x96\x87'
>>> len(c)
6
>>> cu=u'中文'
>>> cu
u'\u4e2d\u6587'
>>> len(cu)
2
>>> s=''
>>> s
'\xf0\xa4\xad\xa2'
>>> len(s)
4
>>> su=u''
>>> su
u'\U00024b62'
>>> len(su)
2
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>> sys.stdout.encoding
'UTF-8'
まず、いくつかの概念を明確にしたいと思います。 私は、cu=u'中文'
のようなユニコード文字列は、実際にはPythonシェルのデフォルトでUTF-16でエンコードされていることを学びました。右? '\u*'
を見たとき、実際にはUTF-16 encoding
? '\u4e2d\u6587'
はユニコード文字列かバイト文字列ですか?しかしcu
ので、メモリに格納する必要がありますlen(ユニコード文字列)
0100 1110 0010 1101 0110 0101 1000 0111
(変換\ u4e2d \ u6587バイナリへの)バイト文字列その場合cu
がフォームに保存されていること? 私はそうですか?
ただし、バイト列にすることはできません。さもなければ、len(cu)は2になることはできません、それは4でなければなりません! これはユニコード文字列でなければなりません。 でも!は私が暗黙のうちに スキームは、現在sys.stdout.encodingに設定されているものでUnicode文字列をエンコードするためにもlearned
ことのpythonの試みをしました、この例では、 「UTF-8」です。だから、
>>> cu.encode('utf-8')
'\xe4\xb8\xad\xe6\x96\x87'
!どうすればlen(cu)
== 2 ???それには'\u'
が2つあるからですか?
しかし、それは意味をなしませんlen(su) == 2
!
何か不足していますか?私のpythonを使用してい
2.7.12
文字! =バイト。 utf16文字は2バイトですが、1文字のみです。 –
あなたはUnicode * first *について読んでみたいです。 http://nedbatchelder.com/text/unipain.html –
@MartijnPietersを参照してくださいありがとう!それはとても役に立ちます – MMMMMCCLXXVII