一、 最近使用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!