我有这个Python3脚本来读取json文件并另存为csv。它工作得很好,除了像\u00e9
这样的特殊字符。所以Montr\u00e9al
应该像Montréal
一样编码,但是它给了我Montréal
。
import json
ifilename = 'business.json'
ofilename = 'business.csv'
json_lines = [json.loads( l.strip() ) for l in open(ifilename).readlines() ]
OUT_FILE = open(ofilename, "w", newline='', encoding='utf-8')
root = csv.writer(OUT_FILE)
root.writerow(["business_id","name","neighborhood","address","city","state"])
json_no = 0
for l in json_lines:
root.writerow([l["business_id"],l["name"],l["neighborhood"],l["address"],l["city"],l["state"]])
json_no += 1
print('Finished {0} lines'.format(json_no))
OUT_FILE.close()
发布于 2018-08-03 05:58:09
事实证明,当用Notepad++打开csv文件时,csv文件显示正确,但用Excel打开它时显示不正确。因此,我必须使用Excel导入csv文件,并指定65001: Unicode (UTF-8)。谢谢你的帮助。
发布于 2018-08-03 05:18:06
尝试在文件的顶部使用此命令
# -*- coding: utf-8 -*-
考虑这个例子:
# -*- coding: utf-8 -*-
import sys
print("my default encoding is : {0}".format(sys.getdefaultencoding()))
string_demo="Montréal"
print(string_demo)
reload(sys) # just in python2.x
sys.setdefaultencoding('UTF8') # just in python2.x
print("my default encoding is : {0}".format(sys.getdefaultencoding()))
print(str(string_demo.encode('utf8')), type(string_demo.encode('utf8')))
在我的例子中,如果我在python2.x中运行,输出如下所示:
my default encoding is : ascii
Montréal
my default encoding is : UTF8
('Montr\xc3\xa9al', <type 'str'>)
但是当我注释掉reload和setdefaultencoding行时,我的输出是这样的:
my default encoding is : ascii
Montréal
my default encoding is : ascii
Traceback (most recent call last):
File "test.py", line 12, in <module>
print(str(string_demo.encode('utf8')), type(string_demo.encode('utf8')))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 5: ordinal not in range(128)
最大的问题是编辑器,Python在发生编码错误时会引发异常。
https://stackoverflow.com/questions/51662228
复制相似问题