文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python之string编码问题怎么解决

2023-07-05 07:39

关注

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

什么是编码?

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

什么是字符集

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

字符集包括如下:

Python之string编码问题怎么解决

1.字库表

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

3.字符编码

一个范例

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

说明:

编码转换方式

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的关系

有了unicode为什么还需要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')

解释器编码有什么用?

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表示什么

使用范例

Pycharm编码设置

问题收集 python3 unicode字符转中文

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

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

如:Unicode、ASCII

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯