博客
关于我
python 字符串显示中文_Python字符串开头的b"、u"、r"与中文乱码
阅读量:797 次
发布时间: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 实现自动化测试 dubbo 协议接口
    查看>>
    python编程基础之十六
    查看>>
    python字符串input输入_Python input()函数:获取用户输入的字符串
    查看>>
    python 对json数据读取及保存与读取,对dump,dumps,load,loads的理解
    查看>>
    Python 对mysql数据库的操作
    查看>>
    Python 对象数据库列表
    查看>>
    Python 导入requests报错No module named requests
    查看>>
    Python 将JPEG图片批量改成jpg并删除JPEG图片
    查看>>
    python 将函数加到列表中进行调用
    查看>>
    python 将图片与字符串相互转换
    查看>>
    Python 嵌套字典全面指南
    查看>>
    Python 工具v简介
    查看>>
    Python编程入门指南:从零开始探索编程的奇妙世界
    查看>>
    python 常见内置函数setattr、getattr、delattr、setitem、getitem、delitem
    查看>>
    Python 常见的错误类型和继承关系
    查看>>
    python 常量_零基础学Python系列之一:Python的变量与常量
    查看>>
    Python 并发编程
    查看>>
    Python编程入门基础及高级技能、Web开发、数据分析和机器学习与人工智能
    查看>>
    python 序列化操作
    查看>>
    Python 开发者,这 7 个 VS Code 插件极力推荐
    查看>>