繁体   English   中英

json.dumps抛出UnicodeDecodeError

[英]json.dumps throws UnicodeDecodeError

我在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"

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

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

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

从Access到Excel的转换应该将您的数据保存为Unicode。 如果所有Unicode文本都可以在“ ANSI代码页”中编码(可能是cp1252,但不要猜测),那么您将不会通过执行Excel“另存为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) -并在文本中查看那些行编辑器,并检查它们是否在您的环境中有意义。

循环遍历文本行,并对每行编码如下:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM