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

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

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

Сообщение Boris » 22 окт 2013, 00:03

Вернусь к старому вопросу: GDAL 1.10.1 не понимает русские буквы в именах файлов.
---
Результаты дискуссии вылились некоторое решение и в статью

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

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

Сообщение Boris » 22 окт 2013, 01:44

Извиняюсь. Все работает в утилитах. Надо задать переменную окружения
set GDAL_FILENAME_IS_UTF8=NO
а я взял вот отсюда
Re: Проблема с GDAL
с пробелами вокруг "=":
GDAL_FILENAME_IS_UTF8 = NO
Единственно, что не онятно, почему надо выставлять

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

chcp 1251

что бы на экране имена файлов отображались без "каркозябр":

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

F:\1\grey>chcp 866
Текущая кодовая страница: 866

F:\1\grey>gdalinfo p-46-87-Б-б-2.jpg
Driver: JPEG/JPEG JFIF
Files: p-46-87-┴-с-2.jpg
Size is 3170, 3776
Coordinate System is `'
и

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

F:\1\grey>gdalinfo p-46-87-Б-б-2.jpg
Driver: JPEG/JPEG JFIF
Files: p-46-87-Б-б-2.jpg
Size is 3170, 3776
Coordinate System is `'

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Статьи: 7
Проекты: 2
Репутация: 261
Откуда: Москва

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

Сообщение Дмитрий Барышников » 22 окт 2013, 22:20

Начиная с 1.9 GDAL переходит (не перешел, но переходит) на кодирование всех строк в UTF8. Это значит, что на вход надо подавать строки (пути к фалам и т.п.) именно в этой кодировке. UTF принята практически во всех дистрибутивах Linux (Windows идет другим путем - CP1251 для кириллицы). Приведенная выше переменная окружения отключает преобразование строк внутри GDAL, что в частности приводит к правильному распознаванию путей.

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

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

Сообщение Boris » 02 ноя 2013, 03:21

Я не могу устоять от вопроса - А есть примеры как передать утилите командной строки в Windows строку в UTF8 ?
Если примеры есть, то я что бы забыть эту чужую мне войну, создам для каждой утилиты специальный командный файл.
---
Я бы не был так странно уверен в том, что Windows не использует Unicode в именах файлов, возможно что он не UTF8, но имена с французскими, корейскими, немецкими и китайскими буквами я имел на стандартной машине Win XP.

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Статьи: 7
Проекты: 2
Репутация: 261
Откуда: Москва

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

Сообщение Дмитрий Барышников » 02 ноя 2013, 18:55

Boris писал(а):Я не могу устоять от вопроса - А есть примеры как передать утилите командной строки в Windows строку в UTF8 ?
Если примеры есть, то я что бы забыть эту чужую мне войну, создам для каждой утилиты специальный командный файл.
Скопировать из того же Notepad++
Boris писал(а): ---
Я бы не был так странно уверен в том, что Windows не использует Unicode в именах файлов, возможно что он не UTF8, но имена с французскими, корейскими, немецкими и китайскими буквами я имел на стандартной машине Win XP.
У Win свои кодировки для перечисленных языков win-1251, win-1252 и т.д. Т.е. вместо одной кодировки utf используется несколько с возможными проблемами автоопределения.

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 740
Ваше звание: Вредитель полей

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

Сообщение ericsson » 02 ноя 2013, 21:04

Все намного хуже.
NTFS хранит имена в UTF-16 (UCS-16), но в windows все функции API, работающие со строками (включая те, кто работают с именами файлов) имеют две версии с суффиксом W и A, то есть работающие с юникодом и ANSI. Если, скажем, файл создан с именем, содержащим русские и греческие буквы, то юникодовые функции работают с ним нормально, а те что ansi - будут пытаться работать со строкой, которая перекодирована из UTF-16 в кодовую страницу, которая выставлена в системе в нац. настройках (то есть если там Россия, то русские буквы переварятся нормально, а греческие - нет).
Проблема начинается, когда преобразованная с потерями строка должна быть обратно сопоставлена с юникодовой исходной.
http://www.utf8everywhere.org/
http://blog.lexa.ru/2011/12/29/q_pereno ... akh_c.html

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

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

Сообщение Boris » 07 ноя 2013, 04:51

после такого развернутого ответа о файловой системе NTFS, я наберусь наглости спросить, что значил совет
Скопировать из того же Notepad++
Потому как пользоваться Notepad++ я умею, но как это связать с ожиданиями GDAL - я не понимаю. Я могу и iconv подключить к перекодировке, вы только подскажите в каком месте это надо подставлять?

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Статьи: 7
Проекты: 2
Репутация: 261
Откуда: Москва

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

Сообщение Дмитрий Барышников » 07 ноя 2013, 21:34

Вы же писали, что "set GDAL_FILENAME_IS_UTF8=NO" помогло.
А Notepad++ просто позволяет либо перекодировать командный файл в UTF-8, либо скопировать в буфер путь в UTF-8.
Чего все таки хочется?

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

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

Сообщение Boris » 08 ноя 2013, 23:56

хочется, что бы работало. :roll:
я извиняюсь, но я не понимаю ответов.
Я совершенно не исключаю, что я чего то не знаю о командной строке Windows. Я ее изучал лет 20 назад и тогда она была лучше документирована чем сейчас. Может я просто не знаю пути как ее переключить в режим "понимания" UTF-8? CP866, СР1251 - знаю. Даже ввод могу настроить ввод в CP1251, хотя не всегда это работает.

Вот я прилагаю BAT файл
1.bat.7z
(152 байт) 217 скачиваний
его текст - это UFT8:
gdalinfo "(1042)_Спутник 19_2013.jpg"
Я запускаю это BAT файл в командной строке:

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

F:\15\Волоколамка-Балтия>я╗┐gdalinfo "(1042)_╨б╨┐╤Г╤В╨╜╨╕╨║ 19_2013.jpg"
"я╗┐gdalinfo" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 740
Ваше звание: Вредитель полей

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

Сообщение ericsson » 09 ноя 2013, 04:10

Можно поэкспериментировать с установкой кодовой страницы 65001 (придется еще установить юникодовый шрифт для консоли). Результат гарантировать не могу, к большому сожалению.

Аватара пользователя
dab
Гуру
Сообщения: 669
Зарегистрирован: 16 дек 2011, 20:02
Статьи: 2
Проекты: 1
Репутация: 169
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

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

Сообщение dab » 09 ноя 2013, 06:26

Boris писал(а):хочется, что бы работало

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

set GDAL_FILENAME_IS_UTF8=NO
Без пробелов вокруг =

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

chcp 1251
Соответственно кодировка текста в BAT файле должна быть именно в 1251, а у вас в UTF-8

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

"C:\Program Files\QGIS Dufour\bin\gdalinfo" "(1042)_Спутник 19_2013.jpg"
Картинку взял свою и назвал под ваш пример.

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

C:\tmp\1>"C:\Program Files\QGIS Dufour\bin\gdalinfo" "(1042)_Спутник 19_2013.jpg"  
Driver: JPEG/JPEG JFIF
Files: (1042)_Спутник 19_2013.jpg
Size is 865, 622
Coordinate System is `'
Image Structure Metadata:
  COMPRESSION=JPEG
  INTERLEAVE=PIXEL
  SOURCE_COLOR_SPACE=YCbCr
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0,  622.0)
Upper Right (  865.0,    0.0)
Lower Right (  865.0,  622.0)
Center      (  432.5,  311.0)
Band 1 Block=865x1 Type=Byte, ColorInterp=Red
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 2 Block=865x1 Type=Byte, ColorInterp=Green
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 3 Block=865x1 Type=Byte, ColorInterp=Blue
  Image Structure Metadata:
    COMPRESSION=JPEG
Вы же написали что всё работает. Зачем BAT файл в UTF-8?
Вложения
1.7z
(157.2 КБ) 195 скачиваний

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Статьи: 7
Проекты: 2
Репутация: 261
Откуда: Москва

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

Сообщение Дмитрий Барышников » 09 ноя 2013, 17:15

Да, dab прав. Просто если без GDAL_FILENAME_IS_UTF8=NO, то получается, что
часть команды: C:\Program Files\QGIS Dufour\bin\gdalinfo - т.е. путь до утилиты должна быть в CP1251, а передаваемые ей параметры - "(1042)_Спутник 19_2013.jpg" - в UTF8.

Предложенный вариант dab у вас заработал?

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 740
Ваше звание: Вредитель полей

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

Сообщение ericsson » 09 ноя 2013, 20:18

Это все для случая, если в путях и именах есть символы только одной кодовой страницы.

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

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

Сообщение Boris » 10 ноя 2013, 02:22

dab писал(а): Вы же написали что всё работает. Зачем BAT файл в UTF-8?
Затем, что мне дали совет, что надо использовать перекодировку в UTF8, что бы все работало по логике авторов GDAL/OGR утилит.
Да, с установленным параметром NO, у меня на одной кодовой странице русской 1251 ( другой мне сейчас не надо, как дойду до немецкой и французской, где в Unicode есть несколько способов для обозначения букв с надстрочными знаками - начну грустить заново) - все работает.
Но в моей логике, раз есть параметр, задаваемый командной строкой, для некоторой заранее известной операционной системы, то он для чего-то создан. Я именно это и спросил - что нужно сделать, что бы из командной строки работать как это мыслится авторам программ. Ранее отмечалось, что есть программы, и их можно победить этим параметром, а есть командные файлы просто передающие параметры программе на python'е. Эти вот с русскими буквами раньше не работали.
Я не исключал, что я не знаю как UTF8 циркулирует в командной строке Win, и согласно совету, Notepad++ тут сможет помочь. Потому как утилитам GnuWin32 никакие переменные не требуются и русские буквы ее то же не смущают.
Хотелось единообразия и новых знаний. :mrgreen:

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 740
Ваше звание: Вредитель полей

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

Сообщение ericsson » 10 ноя 2013, 04:32

Boris писал(а):Я не исключал, что я не знаю как UTF8 циркулирует в командной строке Win, и согласно совету, Notepad++ тут сможет помочь. Потому как утилитам GnuWin32 никакие переменные не требуются и русские буквы ее то же не смущают.
Хотелось единообразия и новых знаний. :mrgreen:
Вот потому я и предлагал:
Можно поэкспериментировать с установкой кодовой страницы 65001 (придется еще установить юникодовый шрифт для консоли). Результат гарантировать не могу, к большому сожалению.

Ответить

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

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

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