国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python解決漢字編碼問題:Unicode Decode Error

2020-02-23 04:17:20
字體:
來源:轉載
供稿:網友

前言

最近由于項目需要,需要讀取一個含有中文的txt文檔,完了還要保存文件。文檔之前是由base64編碼,導致所有漢字讀取顯示亂碼。項目組把base64廢棄之后,先后出現兩個錯誤:

ascii codec can't encode characters in position ordinal not in range 128UnicodeDecodeError: ‘utf8' codec can't decode byte 0x。

如果對于ascii、unicode和utf-8還不了解的小伙伴,可以看之前的這篇文章關于字符串和編碼

那么必須對下面這三個概念有所了解:

    ascii只能表示數字、英文字母和一些特殊符號,不能表示漢字 unicode和utf-8都可以表示漢字,unicode是固定長度,utf-8是可變長度 內存中存儲方式一般為unicode,而磁盤文件存儲方式一般為utf-8,因為utf-8可以節約存儲空間

那么python的默認編碼是什么?

>>> import sys>>> sys.getdefaultencoding()'ascii'>>> reload(sys)<module 'sys' (built-in)>>>> sys.setdefaultencoding('utf-8')>>> sys.getdefaultencoding()'utf-8'

python的默認編碼是ascii,可以通過sys.setdefaultencoding('utf-8')函數設置python的默認編碼。

python中可以通過encode和decode的方式改變數據的編碼,比如:

>>> u'漢字'u'/u6c49/u5b57'>>> u'漢字'.encode('utf-8')'/xe6/xb1/x89/xe5/xad/x97'>>> u'漢字'.encode('utf-8').decode('utf-8')u'/u6c49/u5b57'

我們可以通過這兩個函數設置編碼。

那么,python中的str是什么類型?

>>> import binascii>>> '漢字''/xba/xba/xd7/xd6'>>> type('漢字')<type 'str'>>>> print binascii.b2a_hex('漢字')babad7d6>>> print binascii.b2a_hex(u'漢字')Traceback (most recent call last): File "<stdin>", line 1, in <module>UnicodeEncodeError: 'ascii' codec can't encode characters inposition 0-1: ordinal not in range(128)>>> print binascii.b2a_hex(u'漢字'.encode('utf-8'))e6b189e5ad97>>> print binascii.b2a_hex(u'漢字'.encode('gbk'))babad7d6

binascii是將數據的二進制轉換成ascii,上面的解釋是:‘漢字'的類型是str,二進制是babad7d6,u‘漢字'是無法轉換成ascii,這樣就報出了開頭的第一個錯誤。解決辦法就是把它.encode(‘utf-8')成str類型。因為我命令行是windows默認的GBK編碼,所有u'漢字'.encode(‘gbk')的時候,輸出結果和‘漢字'結果一樣。

總結一下,python的str實際上是unicode的一種,python的默認編碼是ascii,對于非ascii轉成ascii的時候都會報錯,牢記下面的規則:

    unicode => encode(‘合適的編碼') => str str => decode(‘合適的編碼') => unicode

還有一種簡單的方式,就是在文件頭設置編碼,可以省去很多麻煩:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临泉县| 鸡泽县| 安顺市| 开原市| 陵川县| 蒙阴县| 尼玛县| 双江| 常德市| 南投市| 保靖县| 库伦旗| 肥城市| 固安县| 辽源市| 东丰县| 馆陶县| 神木县| 方城县| 中山市| 泰兴市| 万安县| 禄劝| 越西县| 喀什市| 通化市| 上蔡县| 双流县| 黄陵县| 华蓥市| 绵竹市| 临邑县| 扎赉特旗| 枝江市| 贵南县| 商河县| 凤冈县| 德阳市| 石首市| 茌平县| 扶余县|