Python json.dumps抛出UnicodeDecodeError

Python json.dumps抛出UnicodeDecodeError,python,json,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" 您需要找出数据库中使用的字符编码。然后,您需要告诉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"

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

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

json模块采用的默认编码是UTF-8。

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

在文本行上循环并按如下方式编码:

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

首先,我会使用一个支持编码的文本编辑器(比如记事本++),将CSV转换为ASCII,看看问题是否仍然存在。另一种方法是使用编解码器模块(encode()方法),并将参数“errors”设置为“ignore”,这样编解码器问题就不再是一个致命错误,您可以可视化JSON输出,查看数据中是否有什么东西扰乱了编解码器。@Rafael Almeida。谢谢到目前为止,这似乎有效-->row1=unicode(lines1[j],errors='ignore')“我在MS ACCESS数据表中有未知的编码,因为文本输入源于人们从Word文档复制和粘贴。”--难以置信。吹走数据并不是一个修复方法,它是一个失败。我认为问题的出现是因为来自世界各地的人将不同文本条目的数据输入MS ACCESS是通过发送文本文件来完成的……我不确定……但看起来我可能已经通过强制将所有字符串编码为unicode(lines1[j],errors='ignore')来修复了问题忽略数据中有问题的部分。谢谢