在 python 3.8.5 中,我尝试将一些字节转换为字符串,然后将字符串转换为字节:
>>> a=chr(128)
>>> a
'\x80'
>>> type(a)
<class 'str'>
但是当我尝试转换回来时:
>>> a.encode()
b'\xc2\x80'
什么是 \xc2 字节?为什么会出现?
感谢您的回复!
这是UTF-8编码,所以
\xc2
来自这里,看看这里。
在 Python 字符串中,
\x80
表示 Unicode 代码点 #128(填充字符)。当我们以 UTF-8 编码该代码点时,它需要两个字节。
原始的 ASCII 编码只有 128 个不同的字符,Unicode 代码点有数千个,单个字节只能表示 256 个不同的值。很多计算都是基于 ASCII 的,我们希望这些东西能够继续工作,但我们需要非英语国家也能够使用计算机,所以我们需要能够表示他们的字符。
答案是 UTF-8,一种将前 128 个 Unicode 代码点(0-127,ASCII 字符)编码为单个字节的方案 - 因此仅使用这些字符的文本与 ASCII 完全兼容。接下来的 1920 个字符包含最常见的非英语字符(U+80 到 U+7FF),分布在两个字节中。
因此,作为对某些适合单字节编码(例如 \x80)的字符效率稍低的交换,我们获得了表示每种书面语言中每个字符的能力。
要阅读更多内容,请尝试这个SO问题
例如,如果您想删除
\xc2
,请尝试将字符串编码为 latin-1
a=chr(128)
print(a)
#'\x80'
print(a.encode())
#b'\xc2\x80'
a.encode('latin-1')
#b'\x80'