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