python中的字符和字节

python中的字符和字节,python,unicode,byte,cpython,Python,Unicode,Byte,Cpython,在阅读过程中,我发现\uuuuuunicode\uuuuu和\uuuu str\uuuu方法之间存在以下差异: 由于这一差异,在Python2中还有另一种dunder方法用于控制字符串转换:\uuuuuUnicode\uuuuu。在Python2中,\uuuuu str\uuuuuu返回字节,而\uuuuuuuu unicode\uuuuuu返回字符 这里“字符”和“字节”是如何定义的?例如,在C语言中,字符是一个字节,那么字符不就是一个字节吗?或者,这是指(可能是)unicode字符,可能是多

在阅读过程中,我发现
\uuuuuunicode\uuuuu
\uuuu str\uuuu
方法之间存在以下差异:

由于这一差异,在Python2中还有另一种dunder方法用于控制字符串转换:
\uuuuuUnicode\uuuuu
。在Python2中,
\uuuuu str\uuuuuu
返回字节,而
\uuuuuuuu unicode\uuuuuu
返回字符

这里“字符”和“字节”是如何定义的?例如,在C语言中,字符是一个字节,那么字符不就是一个字节吗?或者,这是指(可能是)unicode字符,可能是多个字节?例如,如果我们采取以下措施:

Ω (omega symbol)
03 A9 or u'\u03a9'

在python中,这是一个字符(
Ω)和两个字节,还是两个字符(
03 A9
)和两个字节?或者我混淆了
char
character
之间的区别?

在Python中,
u'\u03a9'
是由单个Unicode字符
Ω
(u+03A9)组成的字符串。该字符串的内部表示是一个实现细节,因此询问所涉及的字节是没有意义的

歧义的一个来源是类似于
“é”
的字符串,它可以是单字符U+00E9或双字符字符串U+0065U+0301

>>> len(u'\u00e9'); print(u'\u00e9')
1
é
>>> len(u'\u0065\u0301'); print(u'\u0065\u0301')
2
é
然而,双字节序列
'\xce\xa9'
可以解释为U+03A9的UTF-8编码

>>> u'\u03a9'.encode('utf-8')
'\xce\xa9'

>>> '\xce\xa9'.decode('utf-8')
u'\u03a9'
在Python3中,这将是(UTF-8是默认的编码方案)

其他字节序列也可解码为U+03A9:

>>> b'\xff\xfe\xa9\x03'.decode('utf16')
'Ω'
>>> b'\xff\xfe\x00\x00\xa9\x03\x00\x00'.decode('utf32')
'Ω'

在Python中,
u'\u03a9'
是由单个Unicode字符
Ω
(u+03A9)组成的字符串。该字符串的内部表示是一个实现细节,因此询问所涉及的字节是没有意义的

歧义的一个来源是类似于
“é”
的字符串,它可以是单字符U+00E9或双字符字符串U+0065U+0301

>>> len(u'\u00e9'); print(u'\u00e9')
1
é
>>> len(u'\u0065\u0301'); print(u'\u0065\u0301')
2
é
然而,双字节序列
'\xce\xa9'
可以解释为U+03A9的UTF-8编码

>>> u'\u03a9'.encode('utf-8')
'\xce\xa9'

>>> '\xce\xa9'.decode('utf-8')
u'\u03a9'
在Python3中,这将是(UTF-8是默认的编码方案)

其他字节序列也可解码为U+03A9:

>>> b'\xff\xfe\xa9\x03'.decode('utf16')
'Ω'
>>> b'\xff\xfe\x00\x00\xa9\x03\x00\x00'.decode('utf32')
'Ω'

忘记任何描述Python2的教程吧。Python3使这些事情变得更简单,Python2已经到了生命的尽头(它只支持不到3个月):现在不要试图去理解那些非常不同的东西(那些已经过时了),我建议你阅读这篇文章。这是从2003年开始的(由Stackoverflow创始人撰写),但接近你现在的疑问:忘记任何描述Python2的教程吧。Python3使这些事情变得更简单,Python2已经到了生命的尽头(它只支持不到3个月):现在不要试图去理解那些非常不同的东西(那些已经过时了),我建议你阅读这篇文章。这是从2003年开始的(由Stackoverflow创始人撰写),但接近您现在的确切疑虑: