Вот проблема, с которой я столкнулся при кодировании и декодировании текстов.
Я пытаюсь написать код, который находит «строку» или «байт» в файле и возвращает путь к файлу .
В настоящее время, поскольку файлы, которые я открываю, имеют кодировку 'windows -1252' или 'cp-1252', я пытался: 1. закодировать мою строку в байт, соответствующий кодировка файла 2. сопоставьте файл и получите путь к нему
У меня есть файл, скажем 'f', который имеет кодировку 'windows -1252' или 'cp-1252' . Он включает текст на китайском языке: '[跑Online農場]'
with open(os.path.join(root, filename), mode='rb') as f:
text = f.read()
print(encoding(text)) # encoding() is a separate function that I wrote that returns the encoding of the file
print(text)
Windows-1252
b'\x00StaticText\x00\x00\x12\x00[\xb6]Online\xb9A\xb3\xf5]\x00\x01\x00\x ...
Как видите, «двоичный» текст для [跑Online農場]
- это [\xb6]Online\xb9A\xb3\xf5]
Однако самое забавное, что если я буквально конвертирую строку в байты, я получаю:
enter_text = '[跑Online農場]'
print(bytes(enter_text, 'cp1252'))
UnicodeEncodeError: 'charmap' codec can't encode character '\u8dd1' in position 1: character maps to <undefined>
С другой стороны, открывая файл с помощью
with open(os.path.join(root, filename), mode='r', encoding='cp-1252') as f ...
, я получаю:
StaticText [¶]Online¹A³õ] €?‹ Œ î...
, который я не уверен, как бы «перевести» '[跑Online農場]'
в '[¶]Online¹A³õ]'
. Ответ на этот вопрос также может решить проблему.
Что мне делать, чтобы правильно «кодировать» китайские / иностранные символы, чтобы они соответствовали байтам «rb», возвращаемым Python?
Спасибо!