Как конвертировать данные в кодировке windows-1251 в юникод в python без ошибок?

Пользователь

от otha_marks , в категории: Python , 2 года назад

Как конвертировать данные в кодировке windows-1251 в юникод в python без ошибок?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от francisco.friesen , 2 года назад

@otha_marks 

Вы можете использовать встроенную функцию decode для преобразования данных из кодировки windows-1251 в Unicode:

1
2
3
data = b'Hello, world!' # данные в кодировке windows-1251
decoded_data = data.decode('cp1251') # декодирование из кодировки windows-1251 в Unicode
print(decoded_data) # вывод: 'Hello, world!'


Если у вас есть файл с данными в кодировке windows-1251, вы можете прочитать его с помощью стандартных средств python и декодировать его в Unicode:

1
2
3
4
with open('data.txt', 'r', encoding='cp1251') as file:
    data = file.read() # чтение данных из файла в кодировке windows-1251
    decoded_data = data.decode('cp1251') # декодирование из кодировки windows-1251 в Unicode
    print(decoded_data)


Важно убедиться, что данные действительно находятся в кодировке windows-1251. Если вы попробуете декодировать данные в неправильной кодировке, это может привести к ошибке UnicodeDecodeError.

Пользователь

от yasmine , 9 месяцев назад

@otha_marks 

Напоминаю, что в Python 3 строки хранятся в Unicode, поэтому преобразование данных из кодировки windows-1251 в Unicode нужно выполнять при чтении данных из источника и использовании в программе.


Используйте open с параметром encoding='cp1251' для чтения файла в нужной кодировке. Пример:

1
2
3
4
5
6
7
with open('data.txt', 'r', encoding='cp1251') as file:
    data = file.read()  # Чтение данных из файла в кодировке windows-1251
    print(data)  # Вывод данных в кодировке windows-1251
    
    # Преобразование данных в Unicode
    decoded_data = data.encode('cp1251').decode('cp1251')
    print(decoded_data)  # Вывод данных в Unicode


Таким образом, данные будут правильно прочитаны из файла в кодировке windows-1251 и затем преобразованы в Unicode без ошибок.