需要在Python 3.7中处理Kannada语言(区域性)而没有编码问题

时间:2019-01-18 10:08:05

标签: python unicode decode unicode-escapes kannada

其中有一个包含Kannada字母的JSON文件。 Info.json

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

如果我尝试不使用

这样的编码来读取此文件
with open('info.json', 'r')

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

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

仅卡纳达语内容被转换为\u0c85\u0ca4\u0ccd\u0ca4\u0cb2\u0cbf\u0ca4\u0ccd\u0ca4之类的Escape Unicode实体

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

我尝试使用各种解码方式,例如...

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

进行了5个小时的大量研究,均未成功。

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

谢谢。

2 个答案:

答案 0 :(得分:2)

  

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

     

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

不,不是。

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

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

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

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

答案 1 :(得分:0)

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

with open('info.json', 'r', encoding='utf8', errors='ignore')