码迷,mamicode.com
首页 > 其他好文 > 详细

第一模块第9章 字符编码

时间:2020-06-18 12:30:59      阅读:35      评论:0      收藏:0      [点我收藏+]

标签:修改   默认   注意   window   mamicode   形式   显示   win   form   

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章 字符编码

标签:修改   默认   注意   window   mamicode   形式   显示   win   form   

原文地址:https://www.cnblogs.com/libyan/p/13099521.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!