Текст с юникод-кодами некорректно отображается в Python 3.7 - PullRequest
0 голосов
/ 02 мая 2020

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

У меня есть текстовый файл с кодами Unicode (не символами, коды), например:

"Edward escribi \ u00c3 \ u00b3 \ u00c3 \ u00ada de su autor favourito"

Эта строка должна отображаться как:

"Edward escribió la biografía de su autor favourito"

Если я загружаю файл, как обычно, я вижу только строки Unicode при печати загруженного текста :

import io
chars = io.open(fb_json_path, encoding='utf-8').read().strip()

Это печатает: "Эдвард escribi \ u00c3 \ u00c3 \ u00c3 \ u00c3 \ u00ada de su autor favito". Это то же самое, если я удаляю параметр кодирования.

Полагаю, мне нужно указать Python, чтобы интерпретировать коды в строке и отображать их как символы utf-8, но я не понимаю, как это сделать что.

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

Ответы [ 2 ]

2 голосов
/ 02 мая 2020

Мы можем сделать это в два этапа:

Сначала мы читаем файл с encoding='unicode_escape', чтобы преобразовать все \uxxxx.

Затем, мы конвертируем это в utf- 8 путем прозрачного кодирования его в байтовый объект (с latin-1 code c) и преобразования его в текст снова, декодируя как utf-8

with open('text.txt', encoding='unicode-escape') as f:
    text = f.read()
    print(text)
    #Edward escribió la biografía de su autor favorito

    # Now we convert it to utf-8
    text = text.encode('latin1').decode('utf8')
    print(text)
    # Edward escribió la biografía de su autor favorito
0 голосов
/ 02 мая 2020

Я полагаю, что ввод каким-то образом искажен неправильной кодировкой.

C3 93 - это байты кодирования UTF-8 для ó ( LATIN CAPITAL LETTER O WITH ACUTE ).

запуск в консоли Python 3

>>> text = "Edward escribi\u00c3\u00b3 la biograf\u00c3\u00ada de su autor favorito"
>>> text.encode('cp1252').decode('utf8')
'Edward escribió la biografía de su autor favorito'
...