>>> 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'中文'
같은 유니 코드 문자열은 실제로는 파이썬 쉘 기본값으로 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에 설정되어 무엇 이건 유니 코드 문자열을 인코딩도 learned
그 파이썬 시도를했습니다,이 경우에는 "UTF-8"입니다.
>>> cu.encode('utf-8')
'\xe4\xb8\xad\xe6\x96\x87'
그래서! 어떻게 할 수 있냐 len(cu)
== 2 ??? 그 안에 두 개의 '\u'
이 있기 때문입니까?
하지만 그건 의미가 없습니다. len(su) == 2
!
내가 누락 된 항목이 있습니까? 내가 파이썬에게 2.7.12
자! = 바이트. utf16 문자는 2 바이트이지만 단 하나의 문자입니다. –
유니 코드 *를 먼저 읽으 려합니다. http://nedbatchelder.com/text/unipain.html을 참조하십시오. –
@MartijnPieters 감사합니다! 매우 도움이됩니다. – MMMMMCCLXXVII