博客
关于我
python 字符串显示中文_Python字符串开头的b"、u"、r"与中文乱码
阅读量:795 次
发布时间:2023-03-07

本文共 1439 字,大约阅读时间需要 4 分钟。

乱码问题的本质:编码与解码的不匹配

在实际开发中,中文乱码问题经常会让开发者抓狂。有时候你会发现一个看似正常的字符串,在经过某种编码转换后却变成了完全无法辨认的怪字符。这种现象背后,往往隐藏着编码与解码方式不匹配的根本原因。

编码与解码的关系

在Python中,字符串是以字节形式处理的,具体编码方式取决于你选择的编码工具。以下是几种常见编码方式及其特点:

  • UTF-8:作为现代主流编码方式,UTF-8兼容性强,字符占用字节数少,常用于文件和网络传输。

  • UTF-16:支持更多语言字符,文件占用空间较大,通常用于需要多语言支持的复杂应用。

  • GB2312(GBK):早期中国常用的编码方式,支持简繁体中文,但字符数量较少。

  • Unicode-escape:一种转义方式,可以包含多种字符编码,通常用于处理特殊字符。

  • 了解这些知识后,乱码问题就变得清晰了。当字符串经过错误的编码转换后,如何还原到原来的信息呢?答案就是尝试不同的解码方式。

    实例分析

    假设有如下字符串:

    s = u'More更多请关注我'

    当用不同的编码方式编码后再解码时,会出现不同结果:

  • UTF-8编码:s.encode('utf-8').decode('utf-8') → 'More更多请关注我'

  • UTF-16编码:s.encode('utf-8').decode('utf-16') → 'More更多请关注我'

  • GB2312编码:s.encode('gbk').decode('ISO-8859-1') → 'More更多请关注我'

  • Unicode-escape编码:s.encode('utf-8').decode('unicode-escape') → 'More更多请关注我'

  • 通过这些实例可以看出,只有当编码方式与解码方式一致时,才能恢复出正确的字符串。

    解决乱码问题

    面对乱码问题,我们需要:

  • 保留原始字符串,并尝试用不同的编码方式解码。

  • 对比不同编码方式的结果,找到最接近的合理解释。

  • 使用反向编码方式解码。

  • 例如,如果发现乱码如下:

    s = b'More\xe6\x9b\xb4\xe5\xa4\x9a\xe8\xaf\xb7\xe5\x85\xb3\xe6\xb3\xa8\xe6\x88\x91'

    尝试用UTF-8解码:

    s.decode('utf-8') → 'More更多请关注我'

    而如果乱码如下:

    s = 'More¸ü¶àÇë¹Ø×¢ÎÒ'

    尝试用GB2312解码:

    s.encode('ISO-8859-1').decode('gbk') → 'More更多请关注我'

    r'强制不转义

    在处理字符串时,特别是涉及文件路径和正则表达式时,r'会更加稳固。r'强制不转义,避免了特殊字符(如\n、\t)转换为其他字符。例如:

    s1 = r'.\folder\new.file's2 = b'.\folder\new.file's3 = u'.\folder\new.file'

    print('r:', s1) → .\folder\new.fileprint('b:', s2) → b'.\folder\new.file'print('u:', s3) → .\folder\new.file

    通过观察可以发现,r'方式更稳定,避免了字符转换的问题。

    每个人的智能决策新时代

    如果您发现文章错误,请不吝留言指正;

    如果您觉得有用,请点喜欢;

    如果您觉得很有用,欢迎转载~

    END

    你可能感兴趣的文章
    Python 中的多进程(01/2):简介
    查看>>
    Python 中的多进程(02/2):进程之间的通信)
    查看>>
    Python 中的字符串、列表、元组和字典数据类型的特点和使用场景
    查看>>
    Python 中的属性访问器是什么?如何使用 @property 装饰器?
    查看>>
    Python 中的带宽限制
    查看>>
    Python 中的机器学习简介:多项式回归
    查看>>
    python读取grib2数据_用Python加载grib2文件
    查看>>
    Python 中的注意点_s2
    查看>>
    Python读取Excel的几种工具包(附Demo)
    查看>>
    Python 中的生成器是什么?
    查看>>
    Python 中的离线语音转文本
    查看>>
    Python读写json文件的简单实现
    查看>>
    Python 中的线程
    查看>>
    Python 中的继承机制是什么样的?
    查看>>
    python读写excel之xlrd&xlwt&xlutils组合
    查看>>
    Python 中的装饰器是什么?
    查看>>
    Python 中的装饰器是如何工作的,有哪些实际应用场景?
    查看>>
    python读excel
    查看>>
    Python 中读取 CSV 文件-ChatGPT4o作答
    查看>>
    Python 之 filecmp
    查看>>