编码 -- python2

2018-09-30  本文已影响0人  勤学奋进小郎君

机器码到字符(中文字符、英文字符...)的转换关系

ASCII

MBCS(multiple byte character set):多字节字符集

Unicode

融合所有编码、统一编码

UCS(Unicode Charater Set),是一张编码表,字符如果传输、存储由UTF(UCS Transformation Format)来负责
所以,最开始直接使用UCS的码位来保存,这就是UTF-16,比如,"汉"直接使用\x6C\x49保存(UTF-16-BE),或是倒过来使用\x49\x6C保存(UTF-16-LE)。

前提知识:当你打开一个文件的时候,你首先需要指定编码方式,然后系统会根据指定的编码来解码文件内容。之所以我们没有遇见,是因为系统会帮我们默认一种编码
打开notepad.exe-->点击文件-->打开

GIF.gif
如果默认使用UTF-8编码保存数据,则会在文件加上BOM头
BOM_UTF8 '\xef\xbb\xbf'
BOM_UTF16_LE '\xff\xfe'
BOM_UTF16_BE '\xfe\xff'

举个栗子:为什么记事本保存'姹塧'后,打开文件会显示'汉a'?

1、首先明确我们的区域默认是GBK(也可以是:CP936),也就是ANSI使用的这个代码页编码


2018-09-30_102324.png
cmd命令行属性的选项列表

2、另存为ANSI编码的文件。


2018-09-30_102812.png

3、保存文件内容时,使用GBK(CP936)编码保存,输出显示使用GBK解码,没问题,正常解码(输出的内容默认是decode("GBK"),也就是去CP936页找到具体的中文字符来显示)


2018-09-30_103315.png

前提条件:微软虽然保存使用ANSI(中文版windows是:CP936)来保存,但是当他的记事本解码时,默认先用UTF-8测试,看是否可以使用UTF-8解码成功,如果成功就返回

就是这种解码策略,造成的这个bug

将gbk编码后的内容,使用"utf-8"解码,刚好是"汉a"的utf-8编码的内容


2018-09-30_104743.png

python2.x编码问题

python中有str类型,其实是字节串,是中文字符查询Unicode码表(编码)后的,再经过区域编码(中国是CP936)转换后的内容,这里我们就把字符串对应的Unicode码表后的内容理解为真正的字符串,str类型是区域编码后的内容

https://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html

上一篇 下一篇

猜你喜欢

热点阅读