python 編碼 UnicodeDecodeError


將一個py腳本從Centos轉到win運行,出錯如下:

UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequence

雖然明白是編碼的問題,網絡上decode()什么的,貌似不適用python3。后來發現使用字節方式打開可以。出錯函數如下:gridfs.GridFS.put()函數。其中調用了讀寫操作

If you want raw bytes then you need to open it in binary mode.

pipe = open('/dev/input/js0','rb')


附上一篇關於python編碼的帖子

1. pyhton的所有內置庫、方法接受的是unicode編碼的字符串。

2. str.decode 函數就是轉成unicode編碼,所以能decode的字符串傳進python的內置庫、函數都能正確運行。

3.問題在於這個decode函數解碼時到底要傳哪個參數:utf-8,gbk,gb2312......等N種編碼。參數不當,就會拋類似異常:

UnicodeDecodeError: 'gbk' codec can't decode bytes in position 2-3: illegal multibyte sequence

   UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-1: invalid data

下面舉個例子:

  1. #coding:utf-8    
  2. #指定本文件編碼為utf8  
  3. import os  
  4. # 以下為示例代碼,不一定能運行。隨意寫的,無編譯運行過。  
  5. # 例子以XP平台為例,因為linux平台編碼(UTF-8)與window平台(GBK)不一樣。  
  6. # 假設D盤下面有很多中文名稱文件  
  7. filelist = os.listdir(r"d:\\") # 此處返回的list中的中文是以GBK編碼的,你可以通過查看cmd窗口屬性看到。  
  8. for path in filelist:  
  9.     if os.path.isdir(path): continue  
  10.      fp = open(path.decode("GBK") , 'rb')  # 如果此處用 path.decode("UTF-8") 就會拋異常,原因是wind的dir命令返回的是GBK編碼  
  11.     print len(fp.read())  
  12.      fp.close()  
  13. filepath =r"d:\\中文文件.doc"             # 假設此文存在,記得要帶中文  
  14. fp = open(filepath.decode('utf-8'), "rb") #這里使用utf8參數進行解碼,原因是文件頭里有句coding: utf-8  
  15. print len(fp.read())  
  16. fp.close()  
  17. path2 = u"d:\\中文文件.doc"  # 假如這里有個u在前面,這個變量就是unicode編碼了,不用解碼。  
  18. fp = open(path2, 'rb')  
  19. print len(fp.read())  
  20. fp.close()  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM