博客
关于我
python 字符串显示中文_Python字符串开头的b"、u"、r"与中文乱码
阅读量:802 次
发布时间: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 交互式数据可视化详解
    查看>>
    python语言有哪些优点和缺点_Python有哪些优缺点,你了解吗?
    查看>>
    Python 从入门到精通:30天速成教程到底有多狠?你能坚持下来吗?
    查看>>
    Python 从数据库中存储和检索密码的最安全方法
    查看>>
    Python语言及其应用 - 知识点遍历
    查看>>
    Python 优化提速的 8 个小技巧
    查看>>
    Python 余弦相似度与皮尔逊相关系数 计算
    查看>>
    python 使用execjs 报编码错误解决办法,UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xac in position 145: il
    查看>>
    python 使用filetype校验文件
    查看>>
    Python 使用flush函数将缓冲区数据立即写磁盘
    查看>>
    python 使用in判断不准确,in不好使
    查看>>
    Python 使用pandas 进行查询和统计详解
    查看>>
    Redis 配置文件redis.conf详细解释
    查看>>
    python网络爬虫(2)——scrapy框架的基础使用
    查看>>
    python网络爬虫实例教程试读_Python网络爬虫实战教程(全套完整版) - 学途无忧网 - 做技术的王者 - Powered By EduSoho...
    查看>>
    Python 使用哈希函数用于加密
    查看>>
    Python 依赖管理的革新——Poetry 深度解析
    查看>>
    python 保留精度及增加去除数字的千位分隔符(金额化数字)
    查看>>
    python 倒计时 9,8,7,。。。。。。0
    查看>>
    Python 入门开发学习笔记之数据的增删改查
    查看>>