Python3 str 到字节转换问题

问题描述 投票:0回答:1

在 python 3.8.5 中,我尝试将一些字节转换为字符串,然后将字符串转换为字节:

>>> a=chr(128)
>>> a
'\x80'
>>> type(a)
<class 'str'>

但是当我尝试转换回来时:

>>> a.encode()
b'\xc2\x80'       

什么是 \xc2 字节?为什么会出现?

感谢您的回复!

python-3.x string byte encode
1个回答
0
投票

这是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'
© www.soinside.com 2019 - 2024. All rights reserved.