【问题标题】:Need to process the Kannada language(Regional) in Python 3.7 without Encoding Issues需要在 Python 3.7 中处理卡纳达语(区域)而没有编码问题
【发布时间】:2019-06-12 14:00:27
【问题描述】:

有一个 JSON 文件,其中包含卡纳达语字母。 信息.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

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

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

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

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

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

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

提前致谢。

【问题讨论】:

  • 您能否提供完整的python代码,帮助SO成员尝试解决您的问题?
  • with open('info.json', 'r', encoding='utf-8') as file: for line in file: print(line) 之类的简单命令运行良好,并在控制台中打印 kannada。
  • 这也很好用 import json from pprint import pprint with open('info.json', 'r', encoding='utf-8') as file: data = json.load(file) pprint(data)

标签: python unicode decode unicode-escapes kannada


【解决方案1】:

如果我像 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 文件。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 2014-04-22
      相关资源
      最近更新 更多