我正在尝试使用附加的 Python 代码(Python V3.5.1)读取以下 json 数据,但 问题是 那个字符表示 ç 为 ç 和 £ 为 £ .
请帮助我编写代码,该代码将正确地从文件读取和写入数据,而无需更改格式或字符集
JSON数据:
{
"config":[{
"filetype": ".csv",
"coldelimiter":"ç",
"rowdelimiter":"£"
}]
}
Python代码:
import json
import os
fileLoc=os.path.join(os.getcwd(),"appconfig.json")
json_data=open(fileLoc).read()
print(json_data)
输出:
{
"config":[{
"filetype": ".csv",
"coldelimiter":"ç",
"rowdelimiter":"£"
}]
}
最佳答案
尽量避免隐式编码和解码。
当您使用 open()
读取(或写入)文本文件(例如 JSON,但与 XML 不同),然后使用某些默认编码对文件内容进行解码。
使用哪种默认编码取决于您的环境;你可以用 locale.getpreferredencoding()
看到这个.
因此,让我们假设 appconfig.json 使用 UTF-8 存储在磁盘上,但是您的语言环境配置为使用 Latin-1,那么字母 ç 将被误解为序列 ç。确认:
>>> 'ç'.encode('utf8').decode('latin1')
'ç'
如果是这种情况,那么很容易修复:在
open()
上指定编码:with open(fileLoc, 'r', encoding='utf8') as f:
json_data = f.read()
还有另一种可能(但不太可能)的解释:也许默认编码已经是 UTF-8,因此从文件中读取数据时会正确解码。
print()
然后,表达式再次使用 UTF-8 对数据进行编码,从而向 STDOUT 发送与文件内容完全相同的字节序列。但是,您的终端(或您用来执行脚本的任何终端)将输出误解为 Latin-1,因此它们显示为乱码。
如果是后者,则需要修复终端配置(接受UTF-8),或者重新编码
sys.stdout
(使用 sys.stdout = codecs.getwriter('latin-1')(sys.stdout)
,但我不建议这样做)。
关于json - 使用 Python 从 Json 文件中读取和写入 Unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43362725/