第一模块第9章 字符编码

Posted libyan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第一模块第9章 字符编码相关的知识,希望对你有一定的参考价值。

https://zhuanlan.zhihu.com/p/108805502

老的字符编码都可以转成unicode, 但是不能通过unicode互转.

使用unicode存入硬盘, 一方面是都采用unicode, 占据空间太大, 更重要的是, 在写入硬盘时, 造成IO增多.

utf-8: unicode transform format-8

英文: 1Bytes

汉字: 3Bytes

结论:

1. 内存固定使用unicode, 我们可以改变的是存入硬盘采用的格式

unicode>>>gbk

unicode>>>shift-jis

以后优先采用: unicode>>>utf-8

2. 文本文件存取乱码问题

存乱了: 编码格式应该设置成支持文件内字符的格式, 现在都应该存成utf-8

取乱了: 解决方法是, 文件是以什么编码格式存入硬盘的, 就应该以什么编码格式读入内存

平时没有遇到乱码问题, 因为文本编辑器都将编码默认存成了utf-8.

windows平台默认采用GBK

3. python3默认读文件的编码是utf-8

python2默认读文件的编码是ascii

解决方法: 指定文件头修改默认的编码

在py文件的首行写:

#coding:gbk  该文件不叫注释, 叫文件头. 控制的是读文件的编码.

控制存所用编码的是编辑器.

在使用pycharm写程序时, 可以通过pycharm下方设置编码格式, 当然可以采用默认的编码格式. 例如编写代码时采用的是GBK格式, 那么编写后的文本代码会在内存中转化为unicode, 然后转化为GBK存到硬盘中. 运行程序时, 首先运行python解释器, 然后python解释器将代码读取到内存, python2解释器默认读取的代码格式是ascii, python3解释器默认读取的格式是utf-8. 所以为了防止读取时出现乱码, 要在文件头部指定编码格式. 所指定的编码格式应该为写代码时采用的编码格式. 注意, python解释器在读取第一行代码时, 使用的默认的编码格式. 然后再使用文件头指定的编码格式读取其他内容.

4. 保证运行python程序前两个阶段不乱码的核心法则:

指定文件头

# coding:文件当初存入硬盘时所采用的编码格式

实际上, 设置好文件头后, pycharm会自动对下方写的代码格式进行优化, 如下:

 

技术图片

5. python3的str类型默认直接存成unicode格式, 无论如何都不会乱码, 所以啥也不用做

python2的str类型默认保存形式不是unicode, 为了保证python2的str类型不乱码, 需要在字符串前面加上u:

x = u‘上‘

6. 了解

python2解释器有两种字符串类型: str  unicode

# str类型

x = ‘上‘  # 字符串值会按照文件头指定的编码格式存入变量值的内存空间.

例如, 如果文件头coding: gbk, 那么该字符会以gbk的格式存于内存中, 如果想执行print(x), 则会将gbk格式的数据转成unicode, 然后再转成字符‘上‘. 如果使用pycharm终端显示, 则会默认采用utf-8的形式(这个我们决定不了)将字节码转换为unicode, 所以会出现乱码. 如果用windows的cmd终端, 则会默认采用gbk的形式将字节码转换为unicode, 不会出现乱码.

# unicode类型

x = u‘上‘ # 强制存成unicode

 

以上是关于第一模块第9章 字符编码的主要内容,如果未能解决你的问题,请参考以下文章

Python开发入门14天集训营·第2章Python 数据类型字符编码学习-3级菜单

第3版emWin教程第26章 字符编码和点阵字体基础知识(重要)

STM32H7教程第52章 STM32H7的LTDC应用之点阵字体和字符编码(重要)

第2章 Python基础-字符编码&数据类型 购物车&多级菜单 作业

LF D2 第2章 数据类型 字符编码

第4章 编码表