UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 46:illegal multibyte sequence


一、 最近使用python寫入文件時,出現了如下的錯誤:

但是content的內容是unicode編碼,不知道怎么和gbk扯上了關系,對content使用encode()和decode(),用gbk,utf-8,gb2312各種編碼解碼都沒有效果;

在網上查找資料,看到一篇文章關於這個的說法:http://blog.csdn.net/xiaoyi_zhang/article/details/51675099

結論是:

1.‘gbk’ codec can’t encode character :說明是將Unicode字符編碼為GBK時候出現了問題,可能是本身Unicode類型的字符中,包含了一些無法轉換為GBK編碼的一些字符;

2. gbk無法轉換'\xa0'字符,所以在轉換前需要將“\xa0”替換掉;使用string.replace(u'\xa0', u' ');

我在上述代碼中使用:

self.file.write(content.replace(u'\xa0', u''))

 結果有效,沒有報錯;

另外一種方法,在gbk解碼時忽略掉不能解碼的數據:

 

self.file.write(content.encode("gbk", 'ignore').decode("gbk", "ignore"))

但是總覺得這種方法是在回避問題,后來突發靈感,這是在文件寫入的時候報的錯誤,而萬惡的windows打開文件默認是以“gbk“編碼的,可能造成不識別unicode字符,於是做了如下的修改:

self.file = open('biaobai.json', 'w', encoding="utf-8")
self.file.write(content)

結果OK!

 


免責聲明!

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



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