Как исправить символы UTF-8, хранящиеся как ASCII - PullRequest
0 голосов
/ 01 января 2019

У меня есть старые данные, которые хранятся в формате ASCII.Очевидно, что существуют данные UTF-8, которые не были должным образом преобразованы в ASCII перед записью.Например, José появится в файле как José.Я легко могу исправить это с помощью кода ниже:

byte[] utf8Bytes = c_TOBETRANSLATED.getBytes("ISO-8859-1");
String s2 = new String(utf8Bytes,"UTF-8");

Но мне нужно сделать этот Python с остальной частью моего кода.Я только начинаю работать с Python, и мои поиски в Интернете, проб и ошибок не помогают мне найти решение Python, которое делает то же самое.

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Если у вас есть "José" «в файле», данные были неверно прочитаны / отображены средством просмотра файлов.Это является UTF-8, но декодировано с неправильной кодировкой.Пример:

import locale

# Correctly written
with open('file.txt','w',encoding='utf8') as f:
    f.write('José')

# The default encoding for open()
print(locale.getpreferredencoding(False))

# Incorrectly opened
with open('file.txt') as f:
    data = f.read()
    print(data)
    # What I think you are requesting as a fix.
    # Re-encode with the incorrect encoding, then decode correctly.
    print(data.encode('cp1252').decode('utf8'))

# Correctly opened
with open('file.txt',encoding='utf8') as f:
    print(f.read())

Вывод:

cp1252
José
José
José
0 голосов
/ 01 января 2019

Если вы используете Python 3, вы можете сделать следующее с помощью функции байтов :

test = "José"
fixed = bytes(test, 'iso-8859-1').decode('utf-8')
# fixed will now contain the string José
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...