Нет ничего плохого в вашей строке! Вы только что перепутали encode()
и decode()
. Строка имеет смысл символов. Чтобы превратить его в байты, которые могут быть сохранены в файле или переданы через Интернет, используйте encode()
с кодировкой , например, UTF-8. Каждое кодирование является схемой для преобразования значимых символов в простые байты вывода.
Когда придет время сделать обратное - взять несколько необработанных байтов из файла или сокета и превратить их в символы, такие как буквы и цифры, - вы расшифруете байтов, используя метод decode()
байтовых строк в Python 3.
>>> str_version = 'នយោបាយ'
>>> str_version.encode('utf-8')
b'\xe1\x9e\x93\xe1\x9e\x99\xe1\x9f\x84\xe1\x9e\x94\xe1\x9e\xb6\xe1\x9e\x99'
Видите эту большую длинную строку байтов? Это те байты, которые UTF-8 использует для представления вашей строки, если вам нужно передать строку по сети или сохранить их в документе. Есть много других используемых кодировок, но это, кажется, самое популярное. Каждая кодировка может превращать значащие символы, такие как ន и យោ, в байты - маленькие 8-битные числа, с которыми общаются компьютеры.
>>> rawbytes = str_version.encode('utf-8')
>>> rawbytes
b'\xe1\x9e\x93\xe1\x9e\x99\xe1\x9f\x84\xe1\x9e\x94\xe1\x9e\xb6\xe1\x9e\x99'
>>> rawbytes.decode('utf-8')
'នយោបាយ'