GIS-LAB

Географические информационные системы и дистанционное зондирование


Форумы GIS-Lab.info

Геоинформационные системы (ГИС) и Дистанционное зондирование Земли


GDAL и русские буквы в именах файлов Windows

Обсуждение материалов сайта: вопросы, замечания, предложения

GDAL и русские буквы в именах файлов Windows

Сообщение Boris » 19 дек 2013, 03:15

по результатам обсуждений:
и в виду достижения приемлемого решения :wink: по использованию русских (и иных не ASCII) букв в именах и путях файлов Windows, результат был сформулирован в статью:
GDAL и русские буквы в именах файлов Windows

=========================================
Статья опубликована.
  • 6

Boris
Гуру
 
Зарегистрирован: 10 апр 2006
Откуда: Париж (на карте)
 
Сообщения: 3868
Репутация: 329
Статьи: 3
Проекты: 1

Re: GDAL и русские буквы в именах файлов Windows

Сообщение ericsson » 19 дек 2013, 04:02

Отличное решение, между прочим... и подойдет еще для энного количества средств, которые не умеют нормально из консоли читать.
А баг соответствующий в трекере я как-то не нашел. Есть?
  • 0

ericsson
Вредитель полей
 
Зарегистрирован: 27 июл 2009
 
Сообщения: 3071
Репутация: 628

Re: GDAL и русские буквы в именах файлов Windows

Сообщение Максим Дубинин » 19 дек 2013, 13:12

Борис, а можно убрать все "костыли" и лирику из статьи, приходится продираться сквозь всё это, чтобы суть уловить.
  • 0

пристегивайтесь, турбулентность прямо по курсу
Аватара пользователя
Максим Дубинин
NextGIS
 
Зарегистрирован: 06 окт 2003
Откуда: Москва (на карте)
 
Сообщения: 8863
Репутация: 627
Статьи: 231
Проекты: 12/6

Re: GDAL и русские буквы в именах файлов Windows

Сообщение Sergey Astakhov » 19 дек 2013, 14:31

Суть можно свести к 3 строчкам:
1) Используйте GDAL_FILENAME_IS_UTF8=NO при прямом запуске exe-шников (при этом будет работать только подмножество символов Cp1251).
2) Используйте GDAL_FILENAME_IS_UTF8=YES при запуске из python-а (при этом должны работать все символы Unicode).
3) Не используйте gdal.GeneralCmdLineProcessor()

Можно наверное вынести это в начало статьи, чтобы кому не интересно, дальше можно было не читать.

Не понятно как именно портит строки gdal.GeneralCmdLineProcessor() - вроде судя по исходникам символы портится не должны, может это от версии python-а зависит?
  • 0

Sergey Astakhov
Активный участник
 
Зарегистрирован: 21 дек 2012
Откуда: Питер (на карте)
 
Сообщения: 186
Репутация: 36

Re: GDAL и русские буквы в именах файлов Windows

Сообщение Boris » 19 дек 2013, 19:57

Максим Дубинин писал(а):Борис, а можно убрать все "костыли" и лирику из статьи, приходится продираться сквозь всё это, чтобы суть уловить.

постараюсь в ближайшее время. оставить только результат? или что-то расширить, потому как появился вопрос про то как именно искажается строка консоли.
  • 0

Boris
Гуру
 
Зарегистрирован: 10 апр 2006
Откуда: Париж (на карте)
 
Сообщения: 3868
Репутация: 329
Статьи: 3
Проекты: 1

Re: GDAL и русские буквы в именах файлов Windows

Сообщение Boris » 19 дек 2013, 20:02

Sergey Astakhov писал(а):Суть можно свести к 3 строчкам:
2) Используйте GDAL_FILENAME_IS_UTF8=YES при запуске из python-а (при этом должны работать все символы Unicode).
3) Не используйте gdal.GeneralCmdLineProcessor()

Можно наверное вынести это в начало статьи, чтобы кому не интересно, дальше можно было не читать.

Не понятно как именно портит строки gdal.GeneralCmdLineProcessor() - вроде судя по исходникам символы портится не должны, может это от версии python-а зависит?

2 и 3 работают только в комплексе. Одно без другого не работает. Нельзя просто уйти в UTF-8 и использовать GeneralCmdLineProcessor.
Я был бы признателен за ссылку на код GeneralCmdLineProcessor. Я так сходу не нашел. То есть нашел но там почему то были две функции, которые ссылались друг на друга (?) и действительно в том как описано код портить не могли.
Но в тех, что я видел в ф-ии имелся 2-ой параметр, не ясно для чего.
  • 0

Boris
Гуру
 
Зарегистрирован: 10 апр 2006
Откуда: Париж (на карте)
 
Сообщения: 3868
Репутация: 329
Статьи: 3
Проекты: 1

Re: GDAL и русские буквы в именах файлов Windows

Сообщение Александр Мурый » 20 дек 2013, 02:28

1) Борис, всё-таки Linux, а не "Lunix"; :) лично я бы вообще написал "Unix-подобные ОС";
2) отсылать к форуму по "диагнозам" лично мне кажется неправильным;
3) dal_merge.bat --> gdal_merge.bat
dal_mergeF.bat --> gdal_mergeF.bat
  • 0

Редактор материалов, модератор форума
Александр Мурый
званий не имею
 
Зарегистрирован: 26 сен 2009
Откуда: Москва (на карте)
 
Сообщения: 4854
Репутация: 661
Статьи: 3
Проекты: 5/1

Re: GDAL и русские буквы в именах файлов Windows

Сообщение Boris » 20 дек 2013, 02:44

Александр Мурый писал(а):1) Борис, всё-таки Linux, а не "Lunix"; :) лично я бы вообще написал "Unix-подобные ОС";
2) отсылать к форуму по "диагнозам" лично мне кажется неправильным;
3) dal_merge.bat --> gdal_merge.bat
dal_mergeF.bat --> gdal_mergeF.bat

Хорошо я поправлю, но для тех, кто видел настоящий Unix, Windows на фоне нынешних клонов Linux, то же может называться "Unix-подобные ОС".
Не понял только по отсылку к форуму, не ссылаться вообще, но я же не сам до всего этого дошел. Куда тогда ссылаться на авторов предложений и предположений?
  • 0

Boris
Гуру
 
Зарегистрирован: 10 апр 2006
Откуда: Париж (на карте)
 
Сообщения: 3868
Репутация: 329
Статьи: 3
Проекты: 1

Re: GDAL и русские буквы в именах файлов Windows

Сообщение Александр Мурый » 20 дек 2013, 12:11

Boris писал(а):Не понял только по отсылку к форуму, не ссылаться вообще, но я же не сам до всего этого дошел. Куда тогда ссылаться на авторов предложений и предположений?

В случае "коллективного разума" ссылка на форум, видимо, нужна.
  • 0

Редактор материалов, модератор форума
Александр Мурый
званий не имею
 
Зарегистрирован: 26 сен 2009
Откуда: Москва (на карте)
 
Сообщения: 4854
Репутация: 661
Статьи: 3
Проекты: 5/1

Re: GDAL и русские буквы в именах файлов Windows

Сообщение Sergey Astakhov » 20 дек 2013, 22:34

Boris писал(а):Я был бы признателен за ссылку на код GeneralCmdLineProcessor. Я так сходу не нашел. То есть нашел но там почему то были две функции, которые ссылались друг на друга (?) и действительно в том как описано код портить не могли.


Сам код, который делает то ради чего его вызывают, вот тут:
http://svn.osgeo.org/gdal/trunk/gdal/gc ... l_misc.cpp
Функция GDALGeneralCmdLineProcessor

Код прослойки, которая занимается конвертацией данных python<>c++ применительно к gdal находится тут: http://svn.osgeo.org/gdal/trunk/gdal/sw ... l_wrap.cpp
Это функции _wrap_GeneralCmdLineProcessor и GeneralCmdLineProcessor которые в итоге вызывают GDALGeneralCmdLineProcessor

Код python-овских функций можно найти здесь: http://hg.python.org/cpython/

Ну и надо учесть, что это самые последние версии кода (из trunk), если ошибка была в старой версии и потом исправлена - надо смотреть по соответствующим веткам тут: http://svn.osgeo.org/gdal/tags/

Проверить порчу строк можно просто - записать из python-а в файл строки на входе функции и на выходе - так можно понять как именно она их портит и где искать подозрительный код.

Boris писал(а):Но в тех, что я видел в ф-ии имелся 2-ой параметр, не ясно для чего.


В комментариях написано что он не используется.
  • 1

Sergey Astakhov
Активный участник
 
Зарегистрирован: 21 дек 2012
Откуда: Питер (на карте)
 
Сообщения: 186
Репутация: 36

Re: GDAL и русские буквы в именах файлов Windows

Сообщение Boris » 17 мар 2016, 22:26

Я хотел добавить к статье текст исправленного стандартного bat-файла "make-bat-for-py.bat", который автоматически порождает нужные bat-файлы для всех *.py скриптов в стандартном каталоге "%OSGEO4W_ROOT%\bin", но не смог - получил сообщение, что я не "участник". А хотелось бы все таки дополнить.
make-bat-for-py.bat

Код: Выделить всё
@echo on 
echo.
echo.    Generating .bat files for all .py files in %OSGEO4W_ROOT%\bin
echo.
pushd "%OSGEO4W_ROOT%\bin"
for %%g in (*.py) do (
      echo @setlocal 1> %%~ng.bat
      echo @echo off 1>> %%~ng.bat
      echo @chcp 65001 1>> %%~ng.bat
      echo Set GDAL_FILENAME_IS_UTF8=YES 1>> %%~ng.bat
      echo set ARGV=%%* 1>> %%~ng.bat
      echo if "%%1"==""  goto iExit 1>> %%~ng.bat
      echo set iTmp=%%tmp%%\%%RANDOM%%_%%~n0_%%RANDOM%%.tmp 1>> %%~ng.bat
      echo @rem echo %%iTmp%% 1>> %%~ng.bat
      echo @echo %%ARGV%%^>"%%iTmp%%" 1>> %%~ng.bat
      echo   @python "%%OSGEO4W_ROOT%%\bin\%%g" --optfile "%%iTmp%%" 1>> %%~ng.bat
      echo @endlocal 1>> %%~ng.bat
      echo exist /b
      echo :iExit 1>> %%~ng.bat
      echo @python "%%OSGEO4W_ROOT%%\bin\%%g" %%*  >> %%~ng.bat
      echo   @python "%%OSGEO4W_ROOT%%\bin\%%g" --optfile "%%iTmp%%"
      echo @endlocal 1>> %%~ng.bat
      echo exist /b
   )
popd
  • 0

Boris
Гуру
 
Зарегистрирован: 10 апр 2006
Откуда: Париж (на карте)
 
Сообщения: 3868
Репутация: 329
Статьи: 3
Проекты: 1

Re: GDAL и русские буквы в именах файлов Windows

Сообщение Александр Мурый » 17 мар 2016, 22:40

Куда именно надо добавить bat?
  • 0

Редактор материалов, модератор форума
Александр Мурый
званий не имею
 
Зарегистрирован: 26 сен 2009
Откуда: Москва (на карте)
 
Сообщения: 4854
Репутация: 661
Статьи: 3
Проекты: 5/1

Re: GDAL и русские буквы в именах файлов Windows

Сообщение Boris » 18 мар 2016, 01:50

Я бы добавил в раздел Решение в конце:
Для стандартных программа - скриптов на python, в комплекте OSGeo4W, используются оболочки в виде BAT-файлов с аналогичным именем. Стандартно они создаются (перезаписываются) командным файлом "make-bat-for-py.bat", который запускается в конце инсталляции. Стандартный "make-bat-for-py.bat" состоит только из одной строки, вызывающей программу python.exe для скрипта с аналогичным именем.
Поскольку при таком вызове невозможно использование файлов с кириллическими символами, в файл оболочку необходимо добавить строки, обеспечивающие дополнительные настройки, призванные обеспечить корректную передачу имен файлов. Для это предлагается замена стандартного"make-bat-for-py.bat" на файл, приводимый ниже, с последующим запуском этого файла, что вызовет массовую замену BAT-файлов, оболочек для скриптов python, в каталоге "%OSGEO4W_ROOT%\bin":
  • 0

Boris
Гуру
 
Зарегистрирован: 10 апр 2006
Откуда: Париж (на карте)
 
Сообщения: 3868
Репутация: 329
Статьи: 3
Проекты: 1

Re: GDAL и русские буквы в именах файлов Windows

Сообщение Александр Мурый » 18 мар 2016, 02:24

Добавил в статью текст и код bat-файла. Борис, странно, что вы не смогли поправить в вики. Вы входили туда под вашим пользователем?
  • 0

Редактор материалов, модератор форума
Александр Мурый
званий не имею
 
Зарегистрирован: 26 сен 2009
Откуда: Москва (на карте)
 
Сообщения: 4854
Репутация: 661
Статьи: 3
Проекты: 5/1


Вернуться в Материалы сайта

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


(Геокруг)

© GIS-Lab и авторы, 2002-2013. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна. Содержание материалов - ответственность авторов (подробнее).