LEN()

2014-07-18 2 views
0

내가 할 경우 :LEN()

€ 
3 
1 

을하지만 내가 할 경우 :

print "\xE2\x82\xAC" 
print len("€") 
print len(u"€") 

내가 얻을

print '\xf0\xa4\xad\xa2' 
print len("") 
print len(u"") 

내가 얻을 :


4 
2 

두 번째 예제에서 len() 함수는 한 문자 유니 코드 문자열 u ""에 대해 1 대신 2를 반환했습니다.

누군가 이것이 왜 그런지 설명 할 수 있습니까?

답변

2

파이썬 2는 unicode 개체 (소위 "좁은"빌드)의 내부 인코딩으로 UTF-16을 사용할 수 있습니다. 이는 이 두 가지 대리모로 인코딩됨을 의미합니다. D852 DF62. 이 경우 len은 실제 유니 코드 코드 포인트 수가 아닌 UTF-16 단위 수를 반환합니다.

파이썬 2는 또한 UTF-32 unicode (소위 "넓은"빌드)를 사용할 수는있는 대부분의 unicode 객체가 두 배 많은 메모리를 가지고 의미로 컴파일,하지만 len(u'') == 1

파이썬 3의 str 객체 이후 3.3 수 있습니다 ISO-8859-1, UTF-16 및 UTF-32 사이의 요구를 전환하십시오. 따라서이 문제는 절대로 발생하지 않습니다 : len('') == 1.

는 3.2 파이썬 3.0

str

+0

파이썬 2에서 unicode과 동일 어떻게 할 수 인코딩의이 종류를 포함하는 유니 코드 문자열을 통해 I 루프? u ""같은 것. – lessthanl0l

+0

@ lessthanl0l : 다음과 같이 해보십시오 : http://stackoverflow.com/questions/7494064/how-to-iterate-over-unicode-characters-in-python-3 –

관련 문제