1

我有一个这样的文件:

aarónico
aaronita
ababol
abacá
abacería
abacero
ábaco
#more words, with no ascii chars

当我读取该文件并将其打印到控制台时,它的打印结果与预期完全相同,但是当我这样做时:

f.write(json.dumps({word: Lookup(line)}))

这被保存了:

{"aar\u00f3nico": ["Stuff"]}

当我预期:

{"aarónico": ["Stuff"]}

当我使用 jason.loads() 时,我需要得到相同的结果,但我不知道在哪里或如何进行编码,或者是否需要让它工作。

编辑

这是将数据保存到文件的代码:

with open(LEMARIO_FILE, "r") as flemario:
    with open(DATA_FILE, "w") as f:
        while True:
            word = flemario.readline().strip()
            if word == "":
                break
            print word #this is correct
            f.write(json.dumps({word: RAELookup(word)}))
            f.write("\n")

这个加载数据并返回字典对象:

    with open(DATA_FILE, "r") as f:
        while True:
            new = f.readline().strip()
            if new == "":
                break
            print json.loads(new) #this is not

如果键与保存的键不同,我无法查找字典。

编辑 2

>>> import json
>>> f = open("test", "w")
>>> f.write(json.dumps({"héllö": ["stuff"]}))
>>> f.close()
>>> f = open("test", "r")
>>> print json.loads(f.read())
{u'h\xe9ll\xf6': [u'stuff']}
>>> "héllö" in {u'h\xe9ll\xf6': [u'stuff']}
False
4

1 回答 1

6

这是正常且有效的 JSON 行为。Python也使用\uxxxx转义,因此请确保不要将 Python 文字表示与字符串的内容混淆。

Python 3.3 中的演示:

>>> import json
>>> print('aar\u00f3nico')
aarónico
>>> print(json.dumps('aar\u00f3nico'))
"aar\u00f3nico"
>>> print(json.loads(json.dumps('aar\u00f3nico')))
aarónico

在 python 2.7 中:

>>> import json
>>> print u'aar\u00f3nico'
aarónico
>>> print(json.dumps(u'aar\u00f3nico'))
"aar\u00f3nico"
>>> print(json.loads(json.dumps(u'aar\u00f3nico')))
aarónico

从文件读取和写入文件时,以及仅指定原始字节字符串(并且"héllö"是原始字节字符串)时,您不会处理 Unicode 数据。您需要先了解编码数据和 Unicode 数据之间的区别。我强烈建议您至少阅读以下 3 篇文章中的 2 篇:

你对你的 python 原始字节字符串表示很幸运"héllö",Python 设法为你自动解码它。从文件中读回的值是完全正常且正确的:

>>> print u'h\xe9ll\xf6'
héllö
于 2013-03-03T10:22:35.670 回答