Python3中的字符编码

Python2中的头文件

    英语是世界上最流行的语言,任何IDE中文本的编码方式几乎都是ASCII,但是,如果想在编译环境中正常显示中文,就需要付出一些额外的努力。对于Python2来说,就面临这个“中文能否正常显示”的问题,因此,为了让编译器知道这些字符是中文,就不能使用ASCII编码了,但是同时又得兼容ASCII,于是,‘utf-8’是一个不错的选择。我们常常在程序最开始加上,

  但是话说回来,对于python3来说,默认的编码方式就是'utf-8', 完全不存在此问题,所以也就不用加这一行了。

Python2 与 Python3 在字符编码领域的区别

   习惯了Python2的同学,如果直接进行Python3的开发,一定会被此问题大大困扰,因为楼主就因为此问题搞的异常痛苦。

  你一定会发现一个问题,那就是,对于str的变量,将无法decode了,会提示,str对象没有decode方法!这是为什么呢?因为,在Python3里面,所有的字符串均是以Unicode码存储的! 本身就是Unicode,自然也就不需要decode了,只需要encode即可。要知道,如果是Python2,如果想对一个字符串进行编码的话,要首先将其decode成unicode,然后再进行encode,而Python3完全省掉了这一步。

  上一节有提到,gb18030,gbk,gb2312这三者是向下兼容的,以下在Python3中做一个小实验,展示了如何将gb2312、gbk和utf-8相互转换。

     同时,我们也可以发现,常用的汉字用“UTF-8”编码大约占3字节。 

     那么,Python2 和 Python3中有关字符编码,到底是怎样一种关系呢?

     本质上来说,这一点是相当混乱的。这不是楼主说的,而是很多程序员的共识。

     在Python3中的 str 对象在Python2中叫做 unicode ,感觉很通俗对吧?但 bytes 对象在Python2叫做 str。如果你想得到一个文本字符串,你需要在字符串之前加上前缀 u 或者 decode 一下。搞笑的还不止这么点,Python2中的 str (字节) 对象,竟然有一个 encode 方法!而且你别指望它有什么特殊用处,它就是用来报错的,永远都别使用它

    

    

     为什么b明明是gbk编码的,却报了一个ascii错误呢?因为python2为了对一个unicode对象解码而自作聪明地进行了隐式编码!以上代码相当于:

 Python中检测字符编码的包-chardet

    有时候我们在进行网页爬虫或者是进行文本处理时,首先应该得到文本

    方法:chardet.detect(字节数据)

    错误原因:希望的输入是字节,结果输入的是str(等价于unicode

 亲测:汉字常常被判定为ibm866,ibm855,iso-8859-2,koi8-r等奇葩编码,但是一般可信度都不高。

 出现这种情况,一般是因为汉字数量太少,这时候判断具有很大的随机性。

这时,如果增加汉字的数量,那么判断的准确性也会因此而提升上去,如下:当判断的字符串中的字符多的时候,可信度就上去了,因为没有出现gbk中出现的生僻字符,所以汉字一般会被判定成“GB2312 

Python中打开(open)一个txt文件

 

关于open()函数的几个实验:

       对于英文字符,即使encoding方法不一样,也没关系。

    

总结:

1ASCII码中的字符不存在编码问题。

2python中的open()函数,不论是读还是写,遇到中文,默认的编码方式都是gbk

猜你喜欢

转载自blog.csdn.net/Bubbler_726/article/details/81671974
今日推荐