我在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"
答案 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')