1

有一个带有卡纳达语字母的 JSON 文件。信息.json

{
  "name":"",
  "url":"",
  "desc":"ಹಾಡುಗಳನ್ನು ಈಗ ಆನಂದಿಸಿ."
}

如果我尝试在没有编码的情况下读取这个文件

with open('info.json', 'r')

我得到错误: 'charmap' codec can't decode byte 0x8d in position 38: character maps to <undefined>

如果我使用 UTF-8 之类的with open('info.json', 'r', encoding='utf-8')

只有卡纳达语内容被转换为转义 Unicode 实体,如\u0c85\u0ca4\u0ccd\u0ca4\u0cb2\u0cbf\u0ca4\u0ccd\u0ca4

由于这是一个字符串,我在将其转换回实际的卡纳达语字符时发现了问题。

我尝试使用各种类型的解码,例如...

str(infoObj['desc'], "utf-8"),
infoObj['desc'].decode('unicode-escape')

做了5个小时的大量研究,但没有任何成功。

寻求有关如何找回卡纳达语文本的帮助。

提前致谢。

4

2 回答 2

2

如果我像 open('info.json', 'r', encoding='utf-8') 一样使用 UTF-8

只有卡纳达语内容被转换为转义 Unicode 实体,如 \u0c85\u0ca4\u0ccd\u0ca4\u0cb2\u0cbf\u0ca4\u0ccd\u0ca4

不它不是。

卡纳达语内容被正确解释为包含卡纳达语字母的 Python 字符串。简单地说,根据您尝试显示非 ascii 字符串的方式,某些字符可能会以其 unicode 值显示,可能会消失或可能被其他特殊替换字符替换。

Python 在字符及其表示之间没有区别:

>>> "\x41\x62" == "Ab"
True

因此,您可能在显示卡纳达语字母时遇到问题,但无法正确解码 json 文件。

于 2019-01-18T11:38:52.933 回答
0

当我添加 errors='ignore' 和 utf8 编码时,它对我有用...

with open('info.json', 'r', encoding='utf8', errors='ignore')
于 2020-05-05T23:16:48.467 回答