【问题标题】:python3 str to bytes convertation problempython3 str到字节的转换问题
【发布时间】:2021-03-12 14:26:37
【问题描述】:

在 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】:

    这是一个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'
    

    【讨论】:

    • 嗨@EvgeniyNekrasov,如果这个或任何答案已经解决了您的问题,请考虑通过单击复选标记接受它。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做,也可以查看this了解更多详情。
    猜你喜欢
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    • 2017-07-12
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    相关资源
    最近更新 更多