Необходимо обработать язык каннада (региональный) в Python 3.7 без проблем с кодировкой

Есть файл 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>

Если я использую UTF-8, как with open('info.json', 'r', encoding='utf-8')

только Каннада Контент конвертируется в Escape Unicode Entities, такие как \u0c85\u0ca4\u0ccd\u0ca4\u0cb2\u0cbf\u0ca4\u0ccd\u0ca4

Поскольку это строка, я нахожу проблему при преобразовании ее обратно в настоящие символы Каннада.

Я пытался использовать различные типы декодирования, как...

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

Провел много исследований за 5 часов безуспешно.

Ищу помощи относительно того, как я могу вернуть Каннада Текст.

Заранее спасибо.

1 ответ

Если я использую UTF-8, как с open('info.json', 'r', encoding='utf-8')

только Каннада Содержимое преобразуется в Escape Unicode Entities, такие как \u0c85\u0ca4\u0ccd\u0ca4\u0cb2\u0cbf\u0ca4\u0ccd\u0ca4

Нет.

Содержимое каннада правильно интерпретируется как строка Python, содержащая буквы каннада. Проще говоря, в зависимости от того, как вы пытаетесь отобразить строку, отличную от ascii, некоторые символы могут отображаться со своими значениями Unicode, могут исчезать или могут быть заменены другими специальными символами замены.

И Python не делает различий между персонажем и его представлением:

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

Таким образом, у вас могут возникнуть проблемы с отображением букв каннада, но не с правильным декодированием файла json.

Это сработало для меня, когда я добавил error='ignore' вместе с кодировкой utf8...

with open('info.json', 'r', encoding='utf8', errors='ignore')
Другие вопросы по тегам