【发布时间】:2018-02-24 13:30:34
【问题描述】:
我又一次进入了该死的 unicode-hell ... 叹息 =(
有两个文件:
$ file *
kreise_tmp.geojson: ASCII text
pandas_tmp.csv: UTF-8 Unicode text
我像这样读取第一个文件:
with open('kreise_tmp.geojson') as f:
jdata = json.loads(f.read())
我这样读第二个文件:
pandas_data = pd.read_csv(r'pandas_tmp.csv', sep=";")
现在看看字符串里面有什么:
>>> jdata['features'][0]['properties']['name']
u'Kreis Euskirchen' # a unicode string?
>>> pandas_data['kreis'][0]
'Kreis D\xc3\xbcren' # not a unicode string?
为什么“UTF-8 Unicode 文本”文件中的字符串只是普通字符串,而“ASCII 文本”文件中的字符串是 unicode 字符串?
【问题讨论】:
-
请附上
hexdump的kreise_tmp.geojson和pandas_tmp.csv。另请注意,按照规范,json 格式不能包含非 asci 符号。所以 json 可能包含相同的\xc3,但它会加载到ü。我猜你需要在打开文件时指定编码 - utf8,检查pd.read_csv是否包含编码参数,如果没有,你需要手动将bytes转换为utf8。 -
什么版本的 Python?尝试升级到 Python 3.6。
-
@deathangel908 JSON 可以包含非 ASCII 符号就好了。 json.org - "任何 UNICODE 字符 ..."
-
我会尝试在
read_csv()中指定encoding='utf-8'。我从未使用过 pandas,但如果你告诉它要使用的编码,它很有可能会将字节串解码为 unicode。 -
每个文本文件(包括 JSON)都使用编写时使用的编码进行编码。您必须使用该编码阅读它。特定示例文本文件的当前内容可能是有效的,可以使用数百种编码中的许多进行解码。
file将为您提供它所知道的可能性之一。如果您想知道文本文件的当前内容是否可以使用特定编码进行解码,您只需使用该编码读取它即可。但是,鉴于所需的 JSON 语法,JSON 使用三种易于区分的编码之一。否则,它不是有效的 JSON。
标签: unicode python-2.x python-unicode