Передача строки Unicode (японский символ) в качестве аргумента командной строки - PullRequest
3 голосов
/ 24 февраля 2012

Я просто спрошу, знает ли кто-нибудь с помощью Python 2.7, как я смогу передать строку в юникоде (например, имя файла на японском языке) в качестве аргумента командной строки моего скрипта на python.Как только это имя файла будет передано функции / методу правильно, некоторая обработка файла будет выполнена (например, извлечение / извлечение метаданных) каким-либо механизмом (DLL, которая идентифицируется как поддерживающая юникод).Я пробовал следующее, но, к сожалению, происходит сбой Python:

Передача имени файла в метод, который будет обрабатывать файл:

processingMethod(unicode(argv[1], "utf-8", errors="ignore").encode("utf-8"))

в методе, вот как я декодируюПереданная строка:

unicode(file_path).decode("utf-8")

Любая обратная связь будет очень полезна.Большое спасибо!

1 Ответ

0 голосов
/ 24 февраля 2012

Юникод (argv [1], "utf-8"

К сожалению, кодировка, используемая в командной строке Windows, никогда не (*) UTF-8. Это локаль-специфическая кодировка, поэтому вы можете передавать только японские символы в качестве аргумента при установке на японский Windows.

Если вы хотите иметь возможность надежно читать символы Unicode в аргументах из Python 2, вам придется прослушивать, чтобы обнаружить васвы работаете в Windows и используете специфичные для Windows API-интерфейсы для чтения аргументов вместо стандартных библиотек C, которые полагаются на кодировку локали. См. этот ответ для примера выполнения этого с ctypes.

(*: хорошо, если вы не сделаете chcp 65001, но это приводит к падению множества других вещей, поэтому лучше избегать.)

...