[英]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.