Я использую zipfile-модуль Python для извлечения ZIP-файлов, которые могут содержать файлы с именами файлов Unicode. WinZip и 7-Zip-архивы работают нормально, но WinRAR кодирует имена файлов несколько иначе. Скажем, я создать почтовый файл, содержащий файл с именем "- ★ - 私 -", и извлечь его с этим:Python: Преобразование имен кодовых имен в Unicode в строки
with zipfile.ZipFile(zip_file_path, 'r') as zf:
zf.extractall(extract_dir)
Это экстракты "- ★ - 私 -" как "- # U2605- # U79c1-" , Имя файла объекта ZipInfo не закодировано, это просто обычная строка ASCII, содержащая имя выходного файла.
Я хотел бы перевести строку, содержащую коды U-2605 и U-79C1 кода Unicode, в полезную строку вывода Unicode. Поэтому я написал это, но он не преобразует символы должным образом:
string = codePoints.replace('#U', '\\u').encode('utf-8')
В любом случае, где я здесь ошибся? Я не получаю тот же результат, я хотел бы получить, если бы я сделал:
string = '-\u2605-\u79c1-'.encode('utf-8')
(. Предполагая, что Python 3, в Python 2, я бы предварить эту предыдущую строку с "U" характер)
Возможно, это связано с тем, что '\\ u2605' не совпадает с '\ u2605'. – Hyperboreus
Если вы хотите получить хакерство, вы действительно сделаете этот шаг, а затем выполните его шаг, который декодируется кодеком 'unicode_escape' (который превратит все эти' \\ u2605' последовательности в символы '\ u2605') , Конечно, это не удастся, если бы у вас были какие-то фактические символы Юникода (как из более стандартных zip-файлов), поэтому вам нужно сделать фантастический танец, чтобы справиться со всеми тупыми краевыми случаями ... – abarnert
Да, моя ошибка с \ u. – wdep1