Как передать строковый параметр, у которого есть проблема с кодировкой, из терминала? - PullRequest
1 голос
/ 24 февраля 2020

Я пытаюсь передать строковый параметр с корейскими символами. Это вызывает ошибку, потому что корейские символы, по-видимому, неправильно закодированы / декодированы перед передачей во встроенную функцию open().

Я написал команду, затем выполнил ее с os.system(), что эквивалентно выполнению в командной строке.

command = 'hwp5txt "C:\\Users\\username\\VSCodeProjects\\myproject\\data_files\\some_folder\\hwp\\2020-01-17_-_한국어가포함된 파일명(2020년도 제1차).hwp" > testdoc.txt'

os.system(command)

Это приводит к ошибке, так как корейские символы неправильно декодируются.

Трассировка (последний последний вызов): файл "C: \ Users \ имя пользователя \ AppData \ Local \ pypoetry \ Cache \ virtualenvs \ asiae-bok-nlp-xpMr0EW7-py3.7 \ Скрипты \ hwp5txt-script.py ", строка 11, в файле load_entry_point ('pyhwp == 0.1b12', 'console_scripts', 'hwp5txt') ()" c: \ users \ username \ appdata \ local \ pypoetry \ кеш \ virtualenvs \ asiae-bok-nlp-xpmr0ew7-py3.7 \ lib \ site-packages \ hwp5 \ hwp5txt.py ", строка 102, в основном
с закрытием (Hwp5File (hwp5path)) как hwp5file: File" c: \ users \ username \ appdata \ local \ pypoetry \ cache \ virtualenvs \ asiae-bok-nlp-xpmr0ew7-py3.7 \ lib \ site-packages \ hwp5 \ filestructure.py ", строка 537, в init stg = Hwp5FileBase (stg) Файл "c: \ users \ username \ appdata \ local \ pypoetry \ cache \ virtualenvs \ asiae-bok-nlp-xpmr0ew7-py3.7 \ lib \ site-packages \ hwp5 \ filestructure.py ", строка 188, в init stg = файл OleStorage (stg)" c: \ users \ username \ appdata \ local \ pypoetry \ cache \ virtualenvs \ asiae-bok-nlp -xpmr0ew7-py3.7 \ lib \ site-packages \ hwp5 \ storage \ ole.py ", строка 35, в init self.impl = impl_class (* args, ** kwargs) Файл "c: \ users \ uesrname \ appdata \ local \ pypoetry \ cache \ virtualenvs \ asiae-bok-nlp-xpmr0ew7- py3.7 \ lib \ site-packages \ hwp5 \ plat \ olefileio.py ", строка 112, в init , если не isOleFile (olefile): Файл" c: \ users \ username \ appdata \ local \ pypoetry \ cache \ virtualenvs \ asiae-bok-nlp-xpmr0ew7-py3.7 \ lib \ site-packages \ olefile \ olefile.py ", строка 309, в isOleFile с открытым (имя файла, 'rb') как fp: OSError: [Errno 22] Недопустимый аргумент: 'C: \ Users \ имя пользователя \ VSCodeProjects \ asiae-BOK-nlp \ data_files \ BOK_minutes \ hwp \ 2020-01-17 _-_ ??????? ??? (2020 ??? 1?). Hwp '

Как вы можете видеть, OS Error был вызван, потому что команда, которую я послал в приглашение, так или иначе не смогла передать права Корейские символы, которые теперь ????? вместо собственного имени.

Я пробовал это на терминале вручную, но он также не работает.

Как передать строковые символы, которые неправильно передаются в модуль?

Я использую последнюю версию VSCode с терминалом Git Bash.

Также я могу проверить эту информацию. Если вам нужна дополнительная информация, пожалуйста, прокомментируйте.

sys.stdout.encoding 
>> 'UTF-8'
sys.stdin.encoding 
>> 'cp1252'
sys.getfilesystemencoding 
>> 'UTF-8'

1 Ответ

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

Оказалось, это не проблема Python, ни VSCode. Это была проблема hwp5txt, когда hwp5txt.exe не переваривает корейский sys.argv. Он работает, пытаясь: $ hwp5txt-script.py 'C:\\...\\한국어가포함된파일.hwp'

Однако меня беспокоит одна вещь: этот скрипт будет работать на терминале, а не на Jupyter Lab или .py.

т.е. os.system(command) или subprocess.run(command, shell=True) не будут работать.

Вместо этого они вызовут всплывающее окно с сообщением:

"У этого файла нет приложения, связанного с ним для выполнения этого действия. Пожалуйста, установите приложение или, если оно есть уже установлена, создайте ассоциацию на странице настроек приложений по умолчанию. "

...