是否unicode字符是指unicode codepoints?
是和否。這取決於python的版本,以及它是如何構建的。
對於版本2.2到3.2(含),python支持窄和寬unicode構建(請參閱PEP-261)。在一個狹窄的構建,所述的unicode範圍被限制爲BMP:
Python 3.2.6 (default, Feb 21 2016, 12:42:00)
[GCC 5.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> sys.maxunicode
65535
等在此範圍之外的字符必須表示爲surrogate pair:
>>> s = ''
>>> ord(s)
128556
>>> len(s)
2
通過引入PEP-0393,窄版本是不再支持python3,所以一個字符總是等於一個代碼點:
Python 3.5.1 (default, Mar 3 2016, 09:29:07)
[GCC 5.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> sys.maxunicode
1114111
>>> s = ''
>>> ord(s)
128556
>>> len(s)
1
爲什麼這麼重要? – hop
只是好奇嗎? :) – eugene
@hop因爲它改變了你如何處理字符串。 –