json.dumps抛出UnicodeDecodeError

时间:2010-11-10 03:05:28

标签: python json

我在MS ACCESS数据表中有未知编码,因为文本输入源自人们从Word文档复制和粘贴。

所以当我尝试时:

final_data_to_write = json.dumps(list_of_text_lines) 

错误输出为:

 "UnicodeDecodeError: 'utf8' codec can't decode byte 0xe1 in position 5: unexpected end of data"

3 个答案:

答案 0 :(得分:3)

您需要找出数据库中使用的字符编码。然后,您需要告诉JSON编码器使用该编码来正确解释字符串。

final_data_to_write = json.dumps(myDict, encoding="XXX")

json模块假定的默认编码是UTF-8。

答案 1 :(得分:2)

从Access到Excel的转换应该将您的数据保存为Unicode。如果所有的Unicode文本都可以在你的“ANSI代码页”中编码(可能是cp1252,但是不要猜),那么你就不会通过Excel“save-as-CSV”来破坏任何东西---如果没有,你'得到?个字符替换不可编码的字符。这些不会导致您当前的问题。

要做的事情:

(1)找出你的“ANSI代码页”:

在我的机器上:

command_prompt>\python27\python -c"import locale;print locale.setlocale(locale.LC_ALL,'')"
English_Australia.1252

所以我的是cp1252

(2)尝试json.dumps(myDict, encoding='cpXXXX')

(3)如果失败了,你需要查看你的数据和你的CSV到JSON代码,看看你是否在某处修改了某些东西。插入一些调试代码以输出包含任何非ASCII字符的任何行的行号 - 测试为any(c >= '\x80' for c in line) - 并在文本编辑器中查看这些行并检查它们是否有意义环境。

答案 2 :(得分:2)

循环文本行并按如下方式对每个文本行进行编码:

row1 = unicode( list_of_text_line[j] , errors='ignore')