от
Я пытаюсь запустить скрипт в CLI с Python, но я нарваться на проблемы из-за специальных символов. Так что если я запускаю этот harcoded он работает просто отлично. Писать "слой Innjsø" на базе назван "innsjo" имя таблицы.
ogr2ogr 

Однако я пытаюсь выполнить это программно, я бегу в проблему с помощью специальных символов.

command = [
        "C:\\Program Files\\QGIS 2.18\\bin\\ogr2ogr.exe",
        "

Если переменная имя_слоя включает в себя специальные символы, я получаю эту ошибку. Слои, используя только латинские символы нормально работать. 

ERROR 1: Couldn't fetch requested layer 'Innsj°'!
У меня нет контроля того, что слои в файл GML называются. Как я могу запустить скрипт командной строки в Python с именами, включая специальные символы?

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

1 Ответ

0 голосов
от
Я мог бы частично воспроизвести с крошечной программы с сброс код указывает ее параметры (*). Что происходит, является то, что Python 3 для Windows-это программа включена полностью в юникоде, и из-за этого
subprocess
использует под капотом
CreateProcessW
и передает командную строку с расширенными символами. Поэтому, когда ребенок использует узкий символов, окна преобразования широких символов в кодовую страницу по умолчанию, который CP1252 для западно-европейских языков. В частности, выясняется, что кодировка консоли не используется. Поэтому, самый надежный способ заключается в использовании 1252 кодовую страницу в консоли:
chcp 1252
. Проблема в том, что если имена слоев были сохранены как cp850 строки байтов, теперь вы будете иметь неправильные значения всех символов ASCII. В этом случае возможное решение-закодировать строку как
cp850
и расшифровать его как
cp1252
. Таким образом, когда библиотека система будет кодировать его, как
cp1252
вы получите ожидаемое значение cp850. Он будет работать здесь, потому что
'ø'.encode('cp850').decode('cp1252')
существует (это символ U 203а
один вправо угол кавычек). Так что это должно работать:
command = [
        "C:\\Program Files\\QGIS 2.18\\bin\\ogr2ogr.exe",
        "



(*) Для справки, вот код на C используется, чтобы вывести коды параметров командной строки:

#include
...