标签:是你 读取 格式 编辑 pad 很多 怎么 额外 标准
但凡涉及到字符的概念,文本文件的内容,python语法中有一种语法是字符串的定义。
软件运行在内存
x = 字符串 第三步有效
涉及到字符编码 -- 》 1~2阶段
2个地方 --》 1~2j阶段(读) -->第三阶段(存)
上 --》 10 --》 二进制 (字符编码表)
存:上 ——翻译——》 二进制
取:下 《--------翻译---------- 二进制
总结:什么是字符编码表,就是字符与数字对应得关系表。
核心
发展史:独大 -》 多乱 -》 统一
美国:ascii码表采用8位二进制数对应一个英文字符,只支持引文字符
中国:bgk 支持英文字符,中文字符。采用8位二进制数对应英文数字(256),采用16位二进制数对应中文字符(56636)
日本:血的JIS 韩国:法克kr
万国码:unicode, 采用16位二京指数(2Bytes)对应一个中文字符,个别生僻会采用4Bytes,8Bytes。注意:内存中同一使用unicode。
上 --》 unicode(内存) --》各国码(硬盘)
下 《--- unicode(内存) 《--- 各国码(硬盘)
1、兼容万国字符
2、兼容万国编码表对应关系(妥协)
字符编码之间不可以转(GBK不能转成ascii, 字符的对应关系不一样,不可以转),字符编码之间可以通过unicode中间介质,进行读写。
utf-8: Underwater Communications SystemTransformation Format
英文 --》 1Bytes
汉字 --》 3Bytes
结论:
内存固定使用unicode,我们可以改变的是存入硬盘采用格式
英文+汉字 -》 unicode -> GBK
英文+日文 --》 unicode --> shift-jis
万国符 --》 unicode --> utf-8
编码:
字符 --》 unicode
unicode --》 老的编码 Gbk、Shift-jis
解码:
unicode -》 字符
老的编码 Gbk、Shift-jis -》 unicode
为什么说unicde是过渡版本?
1、对应王国码
2、最重要的是
也就是说,目前unicode主要是争对于老的版本的兼容,老的没了,它就没有意义了
村乱:
致命,存乱了。文件存的时候,字符要是硬盘中的编码格式所支持的格式。
取乱:
不致命,取乱了。文件是以什么编码格式存入硬盘的,就应该以什么编码格式读入内存。
python中
文件头部解码标识
pycharm这个文本编辑器默认编码就是utf-8(存)
python3解释器默认解码就是utf-8
python解释器按照默认解码方式先读取文件首行,读取首行以后,按照首行指定的解码声明头。
核型法则:保证python程序不乱吗的前提条件,就是你的文本编辑器默认是用什么方式编码存的,你就应该使用什么文件头部解码标识。
第三个阶段:
python3的str类型,存到内存,默认直接存成unicode,不会露娜吗
python2的str类型不会存成unicode到内存。将python2字符串类型使用u‘str’存成unicode,如果你的str使用的是英文可以不加,如果你是中文就必须在字符串前加u
了解:
python2解释器又2种字符串类型,一种str,另外一种unicode。
x='上' --》 str类型(会按照文件头指定的编码格式存入指定的内存空间) print会有这种优化机制,不能打印,放到列表中展示。
x=u'上' --> unicode类型(强制存成unicode)
python解释器中演示:
GBK会拿每一组1个byges中8个比特位的前一位,作为英文与中文的标识信息,用来判断,怎么取。如果首位是1,那么取2个bytes,如果首位是0,那么取1个bytes。
补充:python2中打印可以不加括号。
打印存入内存gbk的编码,默认使用文件头gbk解码打印到终端,但是是使用终端默认的解码方式。windows中使用GBK,MAC使用utf-8.
补充:python终端是utf-8
打印:'\xc9\xcf' -> GBK -> unicode ->显示 (你打印是现实到终端)
如果以后用python2中写程序,定义字符串的时候,一定要在前面加u
python3编码解码:
(HR)egon面试python冷知识:你知道什么叫c9cf?哦!不会啊!下一个。
x = '上'
res = x.encode('gbk') # unicode - > GBK # 编码
print(res, type(res))
res.decode('gbk')
总结:
第一阶段启动python解释器
python3第二个阶段,涉及到python解释器使用解码方式加载文件,默认使用utf-8解码。
python3第三个阶段,涉及到语法问题,存字符串到内存,默认使用unicode
https://www.cnblogs.com/yang1333/p/12379991.html
https://www.cnblogs.com/yang1333/p/12404248.html
https://www.cnblogs.com/yang1333/p/12404248.html
ASCII:只采用8位二进制数(1Bytes)对应一个英文字符。
现代计算机起源于美国,所以最先考虑仅仅是让计算机识别英文字符,于是诞生了ASCII表
GBK:采用8位二进制数(1Bytes)对应一个英文字符,采用16位二进制数(2Bytes)对应一个中文字符。
此时无论是存还是取由于采用的字符编码表一样,所以肯定不会出现乱码问题,但问题是在美国人用的计算机里只能输入英文字符,而在中国人用的计算机里只能输入中文字符和英文字符....,毫无疑问我们希望计算机允许我们输入万国字符均可识别、不乱码,而现阶段计算机采用的字符编码ASCII、GBK、Shift_JIS都无法识别万国字符,所以我们必须定制一个兼容万国字符的编码表
unicode:采用16位二进制数(2Bytes)对应一个字符(注意:2个字节无论是对英文还是中文都是对于1个字符),个别生僻字采用4Byets、8Bytes。
很多地方或老的系统、应用软件仍会采用各种各样传统的编码,这是历史遗留问题。此处需要强调:软件是存放于硬盘的,而运行软件是要将软件加载到内存的,面对硬盘中存放的各种传统编码的软件,想让我们的计算机能够将它们全都正常运行而不出现乱码,内存中必须有一种兼容万国的编码,并且该编码需要与其他编码有相对应的映射/转换关系,这就是unicode的第二大特点产生的缘由
utf-8:采用8位二进制数(1Bytes)对应一个英文字符,采用24位二进制数(3Bytes)对应一个中文字符。
那为何在内存中不直接使用utf-8呢?unicode更像是一个过渡版本,我们新开发的软件或文件存入硬盘都采用utf-8格式,等过去几十年,所有老编码的文件都淘汰掉之后,会出现一个令人开心的场景,即硬盘里放的都是utf-8格式,此时unicode便可以退出历史舞台,内存里也改用utf-8,天下重新归于统一
# 1、内存中固定使用unicode无论输入任何字符都不会发生乱码
# 2、我们能够修改的是存/取硬盘的编码方式,如果编码设置不正确将会出现乱码问题。乱码问题分为两种:存乱了,读乱了
# 2.1 存乱了:如果用户输入的内容中包含中文和日文字符,如果单纯以shift_JIS存,日文可以正常写入硬盘,而由于中文字符在shift_jis中没有找到对应关系而导致存乱了
# 2.2 读乱了:如果硬盘中的数据是shift_JIS格式存储的,采GBK格式读入内存就读乱了
3、python解释器默认读文件的编码
python3默认:utf-8
python2默认:ASCII
指定文件头修改默认的编码:
在py文件的首行写:
#coding:gbk
4、保证运行python程序前两个阶段不乱码的核心法则:
指定文件头
# coding:文件当初存入硬盘时所采用的编码格式
5、
python3的str类型默认直接存成unicode格式,无论如何都不会乱码
保证python2的str类型不乱码
x=u'上'
6、了解
python2解释器有两种字符串类型:str、unicode
# str类型
x='上' # 字符串值会按照文件头指定的编码格式存入变量值的内存空间
# unicode类型
x=u'上' # 强制存成unicode
标签:是你 读取 格式 编辑 pad 很多 怎么 额外 标准
原文地址:https://www.cnblogs.com/yang1333/p/12483512.html