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

Sergey Astakhov
Активный участник
Сообщения: 218
Зарегистрирован: 21 дек 2012, 01:57
Репутация: 52
Откуда: Питер

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

Сообщение Sergey Astakhov » 06 дек 2013, 01:35

Boris писал(а):т.е. я правильно понял, что chcp 65001, заданный в командной строке при вызове программы с параметрами передает в программу строку в UTF-8 ? А остальное поведение зависит от того, что программа ждет и как именно она читает эти параметры командной строки?
Неверно. chcp меняет кодировку для некоторых функций ввода/вывода с консоли/на консоль. cmd такими функциями не пользуется (т.к. пользуется unicode-функциями), поэтому на запуск и передачу параметров эта установка вообще никак не влияет, а меняет только вывод запускаемой программы. Вот вся цепочка передачи символов при запуске программы, которая пользуется ansi-функциями для получения параметров и вывода их на экран:

Console -> (UTF16) -> cmd -> (UTF16) -> Windows -> (GetACP/1251) -> ProgramAnsi -> (GetConsoleOutputCP/chcp) -> Console

А вот так будет если она будет пользоваться unicode-функциями:

Console -> (UTF16) -> cmd -> (UTF16) -> Windows -> (UTF16) -> ProgramUnicode -> (UTF16) -> Console

Если вы ищете способ настройками заставить передать UTF-8 в ansi-функции получения параметров, то единственный способ это сделать не меняя кода - изменить системную настройку (GetACP), но я сомневаюсь в работоспособности этого варианта, т.к. это повлияет на всю систему и скорей всего много чего сломается.

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

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

Сообщение Boris » 06 дек 2013, 10:04

т.е. до вот этого момента

Код: Выделить всё

Console -> (UTF16) -> cmd -> (UTF16) -> 
работает передача консоли?
а дальше идет работа ф-ий, которые написаны в программе?

Код: Выделить всё

Windows -> (UTF16) -> ProgramUnicode -> (UTF16) -> Console
или что есть Windows в данной схеме? Кто портит строку в UTF16? Только ф-ия прикладной программы, которая получает эту строку одной из двух выбранных функций или сама Windows ?

Sergey Astakhov
Активный участник
Сообщения: 218
Зарегистрирован: 21 дек 2012, 01:57
Репутация: 52
Откуда: Питер

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

Сообщение Sergey Astakhov » 06 дек 2013, 16:48

Boris писал(а):или что есть Windows в данной схеме?
Сама операционка.
Boris писал(а):Кто портит строку в UTF16? Только ф-ия прикладной программы, которая получает эту строку одной из двух выбранных функций или сама Windows ?
Внутри Windows всё в UTF16. Но если программа вызывает ansi-функции, то происходит конвертация в соответствующую кодировку. Если подходящих символов в кодировке нет - они меняются на вопросики. Соответственно порча происходит внутри ansi-функции Windows, которую вызывает прикладная программа. Если она вызовет unicode вариант - никакой конвертации не будет, и ничего не испортится.

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

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

Сообщение Boris » 13 дек 2013, 01:58

спасибо! видно придется осилить питон и смотреть, что скрипты на нем вроде gdal_merge, делают с параметрами командной строки и через какие функции обращаются файлам.

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

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

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

Благодарю всех за советы.
Теперь прошу оценить предлагаемый мною результат для возможного использования русских (и м.б. иных UNICODE) символов в именах файлов GDAL/OGR:
Результаты дискуссии вылились некоторое решение и в статью

Ответить

Вернуться в «GDAL/OGR»

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

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