广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python之string编码问题怎么解决
  • 483
分享到

Python之string编码问题怎么解决

2023-07-05 07:07:47 483人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍“python之string编码问题怎么解决”,在日常操作中,相信很多人在Python之string编码问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python之string编码

这篇文章主要介绍“python之string编码问题怎么解决”,在日常操作中,相信很多人在Python之string编码问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python之string编码问题怎么解决”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    什么是编码?

    通常我们所说的编码一般为简称, 其实在平常的应用过程,编码一般包括 编码和解码,如在编码前指定 字符集UTF-8, 那么解码时也必须为UTF-8,否则会出现所谓的 乱码

    什么是字符集

    字符集类似于中文,英文,是一个规则集合的抽象概念,其规定了某个文字对应的二进制数字存放方式,即为编码过程,或者二进制数字对应的文字,即为解码过程!

    字符集包括如下:

    Python之string编码问题怎么解决

    1.字库表

    • 字库表是一个相当于所有可读或者可显示字符的数据库,字库表决定了整个字符集能够展现表示的所有字符的范围

    2.编码字符集(通常简称 字符集)

    • 编码字符集,用一个编码值code point(二进制代码)来表示一个字符(即该字符在字库表中的位置)

    3.字符编码

    • 字符编码,是编码字符集和实际存储数值之间的转换关系;

    • 字符,是根据字符编码方案转换为一个二进制数值存储在计算机中的

    一个范例

    下面以一个实例解释下编解码的过程

    • 字符编码: UTF-8

    • 字符串:中国

    • Python版本:2.7

    说明:

    编码转换方式

    Python之string编码问题怎么解决

    str_unicode为中间码。

    即对应编码字符集 在字库表中有唯一id代表一个字符, 理论上 unicode即可以映射表示所有字符,但是为了压缩存储的位数,发展出了 utf-8、utf-16等字符编码,即在实际存储和字符展现之间又建立了一层映射,这层映射表示了 utf-8 到 unicode的方式,然后unicode又根据字库表展现改字符。

    unicode有 utf-8及utf-16等多种方式的字符编码方案,GBK字符集 则只有一种字符编码 EUC-CN, 而对于Ascii码来说,本身即是编码字符集又是字符编码,

    以一次Python代码执行为例, 解释 字库表编码字符集(字符集) 字符编码的关系:

    Python之string编码问题怎么解决

    utf-8编码如何规定的?

    单字节的字符,字节的第一位设为0,对于英语文本,UTF-8码只占用一个字节,和ASCII码完全相同;

    n个字节的字符(n>1),第一个字节的前n位设为1,第n+1位设为0,后面字节的前两位都设为10,这n个字节的其余空位填充该字符unicode码,高位用0补足。

    UTF-8编码方式

    ----------------------
    0xxxxxxx
    110xxxxx 10xxxxxx
    1110xxxx 10xxxxxx 10xxxxxx
    11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

    utf-8和unicode的关系

    • utf 解释为诶 Unicode TransferFORMat 即 转换Unicode。

    • unicode是一种字符编码,规定了每个字符到数字的映射关系, 这个数字怎么存储它没有规定. 而如何存储? 几个字节表示? 这个是utf8等编码方式来规定的。

    有了unicode为什么还需要utf-8呢?

    • 首先 unicode 规定了所有字符的二进制编码,并没有规定如何存储

    • 如果我们以统一4个字节来存储所有unicode的编码字符,那就会在表示一个字节编码的ascii部分严重浪费存储性能

    • 另外因为统一4字节处理,那如果一个文件分片或者是一份缺失文件,那么此时该如何来判断我们从头读取的 4字节是一个完整的字符呢?这就会造成很大的分析复杂度,可以说 无法分析, 这也是 utf-8等编码的优点即utf-8错误编码不会向后扩散

    • 综合考虑 utf-8 是一种unicode 标准的存储方案,改方案规定了如何存储unicode字符,即看上面的utf-8的规定,大白话讲就是 utf-8 可变长编码规定了 字符的起始位置,且极大可能节省存储空间,总而言之很简单就是在无序中找到秩序

    影响Python执行的编码方案

    下列四种影响Python执行的编码方案,具体实例以最后所列案例为准

    1.Python解释器的默认编码

    获取解释器默认编码,python3对应的默认编码为 utf-8,Python2对应的默认编码为ascii

    import sysprint(sys.getdefaultencoding())

    Python2设置默认编码方式,Python3解释器默认utf-8所以去除该种设置方式

    import sysreload(sys)sys.setdefaultencoding('utf-8')

    解释器编码有什么用?

    • 当调用 decode() 和 encode() 进行编码转换时候,如果未指定编码格式,会调用解释器默认编码进行编码转换

    • 若未指定编码方式 而有中文出现,此时会有报错产生

    2.Python源文件文件编码

    python源文件的编码与解码,我们写的python程序从产生到执行的过程如下(以PyCharm为例)

    Python之string编码问题怎么解决

    依次为

    编辑器 决定源代码的编码格式(编辑器中设置)

    pycharm 会根据文件开头的编码声明进行文件格式保存

    此种声明保存的文件,是utf-8编码的

    # coding: utf-8

    此种声明保存的文件,是gbk编码的

    # coding: gbk

    同时也可以在setting中进行设置

    Python之string编码问题怎么解决

    解释器按照Ascii或者声明指定的方式解码源代码, 以下是 官方文档给的解释

    Python will default to ASCII as standard encoding if no other encoding hints are given.

    ※: Python2中会按照编码声明对源代码进行解码,如未指定 编码声明 则会以 Ascii进行解码,此时如果有中文会报错

    ※:Python3默认以utf-8进行解码

    若未指定编码声明, 而源代码中有中文

    此时Python2 会以Ascii 来进行源代码的'解码';Python3 会默认以  utf-8 进行源代码的'解码'。    

    若源文件编码为utf-8, 而编码声明gbk

    这种情况会出错,因为磁盘中保存的格式时 gbk 格式的而却以 utf-8 来进行解码,则会出错。

    UnicodeDecodeError: 'gbk' codec can't decode bytes in position 2-3: illegal multibyte sequence

    Python之string编码问题怎么解决

    注意1:Python3将源代码读取到内存中的字符串编码为 unicode, 这样的中间码的方式,不会出现乱码, Python2以文件头声明的方式将源代码读取到内存中

    注意2:Python2 在日常编程中一定注意 文件编码 和 文件声明要一致,如 文件编码为 utf-8 则此时应该如此声明 # coding: utf-8, 若此时用gbk 做声明,则此时会乱码,一编一解 要成对

    结果输出,控制台输出日志文件

    解释器如何知道该文件的编码格式?

    # coding: utf-8

    3.操作系统的语言设置

    locale 模块获取 操作系统编码

    import localeprint locale.getdefaultencoding()

    以open()函数为例

    open() 函数会调用 Python操作系统默认编码进行 编解码

    # coding: utf-8import sys; reload(sys); sys.setdefaultencoding('utf-8')str = '中国'  # utf-8  bytes类型str_unicode = str.decode()  # unicodewith open('demo.txt', 'w') as f:f.write(str)  # 写入bytes类型,则此时文件编码为 utf-8 f.write(str_unicode)  # 写入 unicode,则此时会根据 sys.getdefaultencoding() 来进行文件编码

    linux 下 vim打开以 gbk方式写入的文件会出现乱码,因为此时会调用操作系统的编码方式进行解码

    4.Terminal使用的编码

    终端编码 继承自操作系统的编码

    Python中的编码表示范例

    1.utf-8表示中文你好

    print("你好".encode('utf-8'))>>> b'\xe4\xbd\xa0\xe5\xa5\xbd'

    很容易看出 其中的 16进制数 e4bda0e5a5bd

    2.Python中的len表示什么

    • 对于字节流(bytes: 如utf-8字节流)来说表示字节数

    • 对于unicode则表示字符数

    使用范例

    Pycharm编码设置

    • 字符串变量级别编码

    • 脚本级别的编码

    • py文件级别的编码

    • 显示窗口的编码

    问题收集 python3 unicode字符转中文

    a = "\\u4ea7\\u54c1\\u72b6\\u6001"# 两种方式print(eval(f'u"{a}"'))print(a.encode().decode("unicode_escape"))

    即 一个字符可以是一个中文汉字、一个英文字母、一个阿拉伯数字、一个标点符号等 ↩︎

    如:Unicode、ASCII

    到此,关于“Python之string编码问题怎么解决”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

    --结束END--

    本文标题: Python之string编码问题怎么解决

    本文链接: https://www.lsjlt.com/news/350335.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Python之string编码问题怎么解决
      这篇文章主要介绍“Python之string编码问题怎么解决”,在日常操作中,相信很多人在Python之string编码问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python之string编码...
      99+
      2023-07-05
    • Python之string编码问题
      目录一、前言什么是编码?什么是字符集二、影响Python执行的编码方案1.Python解释器的默认编码2.Python源文件文件编码3.操作系统的语言设置4.Terminal使用的编...
      99+
      2023-02-28
      Python string编码 string编码 Python编码
    • nodejs之base64编码解码问题
      目录nodejs base64 编码解码普通字符串编码解码并转成hex编码解码图片nodejs 操作base64总结nodejs base64 编码解码 普通字符串 编码 var b...
      99+
      2023-02-08
      nodejs base64 base64编码解码 nodejs base64 编码解码
    • python中文编码乱码问题的解决
      目录前言:一、什么是字符编码。1.ASCII2.GB23123.Unicode4.UTF-8二、Python2中的字符编码三、decode()与encode()方法四、一个字符编码的...
      99+
      2022-11-12
    • Python之ThreadPoolExecutor线程池问题怎么解决
      本文小编为大家详细介绍“Python之ThreadPoolExecutor线程池问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python之ThreadPoolExecutor线程池问题怎么解决”文章能帮助大家解决疑惑,下面跟...
      99+
      2023-07-05
    • python如何解决中文编码乱码问题
      小编给大家分享一下python如何解决中文编码乱码问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、什么是字符编码。要彻底解决字符编码的问题就不能不去了解到底...
      99+
      2023-06-25
    • JAVA中的Unicode编码问题怎么解决
      在Java中解决Unicode编码问题有多种方法:1. 使用正确的字符编码读取和写入文件:当从文件中读取或写入文本时,需要注意使用正...
      99+
      2023-08-19
      JAVA
    • MySQL字符集编码问题怎么解决
      本文小编为大家详细介绍“MySQL字符集编码问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL字符集编码问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。方法1:在创建数据库时,指定字...
      99+
      2023-07-06
    • Python的文本文件转换编码问题怎么解决
      这篇文章主要介绍“Python的文本文件转换编码问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python的文本文件转换编码问题怎么解决”文章能帮助大家解决问题。测试数据注:测试文本采用...
      99+
      2023-07-06
    • python解决汉字编码问题:Unicode Decode Error
      前言 最近由于项目需要,需要读取一个含有中文的txt文档,完了还要保存文件。文档之前是由base64编码,导致所有汉字读取显示乱码。项目组把base64废弃之后,先后出现两个错误: ascii code...
      99+
      2022-06-04
      汉字 python Unicode
    • Python UnicodedecodeError编码问题解决方法汇总
      目录1.情景一2.情景二3.情景三4. chardet模块detect()函数今天真的被编码问题一直困扰着,午休都没进行。也真的见识到了各种编码。例如:gbk,unicode、utf...
      99+
      2022-11-11
    • Java中properties文件编码问题怎么解决
      本文小编为大家详细介绍“Java中properties文件编码问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中properties文件编码问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
      99+
      2023-06-29
    • 简单解决Python文件中文编码问题
      读写中文 需要读取utf-8编码的中文文件,先利用sublime text软件将它改成无DOM的编码,然后用以下代码: with codecs.open(note_path, 'r+','utf-8')...
      99+
      2022-06-04
      中文 简单 文件
    • 解决uWSGI的编码问题详解
      发现问题 最近工作中遇到一个问题,在把 Flask 写的应用通过 Supervisor+uWSGI 部署到正式服务器上时,出现了这样的错误: Unable to print the message an...
      99+
      2022-06-04
      详解 uWSGI
    • 如何解决mysql编码问题
      解决mysql编码问题的方法更改数据库安装时的字符编码。打开mysql安装目录。找到my.ini文件,以记事本的方式打开。直接修改配置文件的字符编码为utf8,如:default-character-set=utf8character-se...
      99+
      2022-10-17
    • Python脚本出现乱码问题怎么解决
      这篇文章主要介绍“Python脚本出现乱码问题怎么解决”,在日常操作中,相信很多人在Python脚本出现乱码问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python脚本出现乱码问题怎么解决”的疑...
      99+
      2023-06-30
    • 怎么解决linux shell脚本编码格式问题
      这篇文章主要讲解了“怎么解决linux shell脚本编码格式问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决linux shell脚本编码格式问...
      99+
      2022-10-18
    • mysql怎么远程备份并解决编码问题
      本篇内容介绍了“mysql怎么远程备份并解决编码问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!#!/b...
      99+
      2022-10-18
    • Ado.Net乱码问题怎么解决
      这篇文章主要介绍“Ado.Net乱码问题怎么解决”,在日常操作中,相信很多人在Ado.Net乱码问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Ado.Net乱码问题怎么解决”的疑惑有所帮助!接下来...
      99+
      2023-06-17
    • 怎么解决ajax乱码问题
      这篇文章给大家分享的是有关怎么解决ajax乱码问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。上网找了一些资源,才弄明白这是编码的问题,我的服务器端发送过来的数据是GB2312...
      99+
      2022-10-19
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作