Страница 1 из 1

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

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

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

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

Добавлено: 19 дек 2013, 03:02
ericsson
Отличное решение, между прочим... и подойдет еще для энного количества средств, которые не умеют нормально из консоли читать.
А баг соответствующий в трекере я как-то не нашел. Есть?

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

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

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

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

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

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

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

Добавлено: 19 дек 2013, 18:57
Boris
Максим Дубинин писал(а):Борис, а можно убрать все "костыли" и лирику из статьи, приходится продираться сквозь всё это, чтобы суть уловить.
постараюсь в ближайшее время. оставить только результат? или что-то расширить, потому как появился вопрос про то как именно искажается строка консоли.

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

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

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

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

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

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

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

Добавлено: 20 дек 2013, 01:44
Boris
Александр Мурый писал(а):1) Борис, всё-таки Linux, а не "Lunix"; :) лично я бы вообще написал "Unix-подобные ОС";
2) отсылать к форуму по "диагнозам" лично мне кажется неправильным;
3) dal_merge.bat --> gdal_merge.bat
dal_mergeF.bat --> gdal_mergeF.bat
Хорошо я поправлю, но для тех, кто видел настоящий Unix, Windows на фоне нынешних клонов Linux, то же может называться "Unix-подобные ОС".
Не понял только по отсылку к форуму, не ссылаться вообще, но я же не сам до всего этого дошел. Куда тогда ссылаться на авторов предложений и предположений?

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

Добавлено: 20 дек 2013, 11:11
Александр Мурый
Boris писал(а): Не понял только по отсылку к форуму, не ссылаться вообще, но я же не сам до всего этого дошел. Куда тогда ссылаться на авторов предложений и предположений?
В случае "коллективного разума" ссылка на форум, видимо, нужна.

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

Добавлено: 20 дек 2013, 21:34
Sergey Astakhov
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-ой параметр, не ясно для чего.
В комментариях написано что он не используется.

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

Добавлено: 17 мар 2016, 21:26
Boris
Я хотел добавить к статье текст исправленного стандартного 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

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

Добавлено: 17 мар 2016, 21:40
Александр Мурый
Куда именно надо добавить bat?

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

Добавлено: 18 мар 2016, 00:50
Boris
Я бы добавил в раздел Решение в конце:
Для стандартных программа - скриптов на 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":

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

Добавлено: 18 мар 2016, 01:24
Александр Мурый
Добавил в статью текст и код bat-файла. Борис, странно, что вы не смогли поправить в вики. Вы входили туда под вашим пользователем?