Python 脚本无法正确编码特殊 Unicode 字符
Python script failing to correctly encode special Unicode characters
我正在转换一个文本文件 (words.txt
),它基本上是这种格式的字典:
good morning, Góðan daginn
以这种格式json 文件 (converted.json
)
{
"wordId": 1,
"word": "good morning",
"translation": "Góðan daginn"
}
从文本文件到 json 文件的转换工作完全正常,正如预期的那样,但字符编码有点混乱,方法如下:
编码这个字符 ð
而不是这样做 \u00f0
脚本像这样编码那个字符: \u00c3\u00b0
问题:如何修复and/or调整脚本使其能够正确编码那些特殊字符?请记住,这些字符主要是 Icelandic/Scandinavian,我使用 PyCharm 作为 IDE。
PS请注意我的Python技能有点有限!!
这是脚本converter.py:
import json
with open('words.txt', 'r') as f_in, \
open('converted.json', 'w') as f_out:
cnt = 1
data = []
for line in f_in:
line = line.split(',')
if len(line) != 2:
continue
d = {"wordId": cnt, "word": line[0].strip(), "translation": line[1].strip()}
data.append(d)
cnt += 1
f_out.write(json.dumps(data, indent=4))
我正在使用Python3
我认为问题出在 json.dumps
,您可能需要使用 ensure_ascii=False
。喜欢:
f_out.write(json.dumps(data, indent=4, ensure_ascii=False))
所以基本上,正如文档所说:
If ensure_ascii is true (the default), the output is guaranteed to
have all incoming non-ASCII characters escaped. If ensure_ascii is
false, these characters will be output as-is.
我正在转换一个文本文件 (words.txt
),它基本上是这种格式的字典:
good morning, Góðan daginn
以这种格式json 文件 (converted.json
)
{
"wordId": 1,
"word": "good morning",
"translation": "Góðan daginn"
}
从文本文件到 json 文件的转换工作完全正常,正如预期的那样,但字符编码有点混乱,方法如下:
编码这个字符 ð
而不是这样做 \u00f0
脚本像这样编码那个字符: \u00c3\u00b0
问题:如何修复and/or调整脚本使其能够正确编码那些特殊字符?请记住,这些字符主要是 Icelandic/Scandinavian,我使用 PyCharm 作为 IDE。
PS请注意我的Python技能有点有限!!
这是脚本converter.py:
import json
with open('words.txt', 'r') as f_in, \
open('converted.json', 'w') as f_out:
cnt = 1
data = []
for line in f_in:
line = line.split(',')
if len(line) != 2:
continue
d = {"wordId": cnt, "word": line[0].strip(), "translation": line[1].strip()}
data.append(d)
cnt += 1
f_out.write(json.dumps(data, indent=4))
我正在使用Python3
我认为问题出在 json.dumps
,您可能需要使用 ensure_ascii=False
。喜欢:
f_out.write(json.dumps(data, indent=4, ensure_ascii=False))
所以基本上,正如文档所说:
If ensure_ascii is true (the default), the output is guaranteed to have all incoming non-ASCII characters escaped. If ensure_ascii is false, these characters will be output as-is.