GDAL и русские буквы в именах файлов Windows
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: GDAL и русские буквы в именах файлов Windows
Извиняюсь. Все работает в утилитах. Надо задать переменную окружения
Re: Проблема с GDAL
с пробелами вокруг "=":
что бы на экране имена файлов отображались без "каркозябр":
и
а я взял вот отсюда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
- Репутация: 261
- Откуда: Москва
Re: GDAL и русские буквы в именах файлов Windows
Начиная с 1.9 GDAL переходит (не перешел, но переходит) на кодирование всех строк в UTF8. Это значит, что на вход надо подавать строки (пути к фалам и т.п.) именно в этой кодировке. UTF принята практически во всех дистрибутивах Linux (Windows идет другим путем - CP1251 для кириллицы). Приведенная выше переменная окружения отключает преобразование строк внутри GDAL, что в частности приводит к правильному распознаванию путей.
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: GDAL и русские буквы в именах файлов Windows
Я не могу устоять от вопроса - А есть примеры как передать утилите командной строки в Windows строку в UTF8 ?
Если примеры есть, то я что бы забыть эту чужую мне войну, создам для каждой утилиты специальный командный файл.
---
Я бы не был так странно уверен в том, что Windows не использует Unicode в именах файлов, возможно что он не UTF8, но имена с французскими, корейскими, немецкими и китайскими буквами я имел на стандартной машине Win XP.
Если примеры есть, то я что бы забыть эту чужую мне войну, создам для каждой утилиты специальный командный файл.
---
Я бы не был так странно уверен в том, что Windows не использует Unicode в именах файлов, возможно что он не UTF8, но имена с французскими, корейскими, немецкими и китайскими буквами я имел на стандартной машине Win XP.
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: GDAL и русские буквы в именах файлов Windows
Скопировать из того же Notepad++Boris писал(а):Я не могу устоять от вопроса - А есть примеры как передать утилите командной строки в Windows строку в UTF8 ?
Если примеры есть, то я что бы забыть эту чужую мне войну, создам для каждой утилиты специальный командный файл.
У Win свои кодировки для перечисленных языков win-1251, win-1252 и т.д. Т.е. вместо одной кодировки utf используется несколько с возможными проблемами автоопределения.Boris писал(а): ---
Я бы не был так странно уверен в том, что Windows не использует Unicode в именах файлов, возможно что он не UTF8, но имена с французскими, корейскими, немецкими и китайскими буквами я имел на стандартной машине Win XP.
-
- Гуру
- Сообщения: 3321
- Зарегистрирован: 27 июл 2009, 19:26
- Репутация: 748
- Ваше звание: Вредитель полей
Re: GDAL и русские буквы в именах файлов Windows
Все намного хуже.
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
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
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: GDAL и русские буквы в именах файлов Windows
после такого развернутого ответа о файловой системе NTFS, я наберусь наглости спросить, что значил совет
Потому как пользоваться Notepad++ я умею, но как это связать с ожиданиями GDAL - я не понимаю. Я могу и iconv подключить к перекодировке, вы только подскажите в каком месте это надо подставлять?Скопировать из того же Notepad++
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: GDAL и русские буквы в именах файлов Windows
Вы же писали, что "set GDAL_FILENAME_IS_UTF8=NO" помогло.
А Notepad++ просто позволяет либо перекодировать командный файл в UTF-8, либо скопировать в буфер путь в UTF-8.
Чего все таки хочется?
А Notepad++ просто позволяет либо перекодировать командный файл в UTF-8, либо скопировать в буфер путь в UTF-8.
Чего все таки хочется?
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: GDAL и русские буквы в именах файлов Windows
хочется, что бы работало.
я извиняюсь, но я не понимаю ответов.
Я совершенно не исключаю, что я чего то не знаю о командной строке Windows. Я ее изучал лет 20 назад и тогда она была лучше документирована чем сейчас. Может я просто не знаю пути как ее переключить в режим "понимания" UTF-8? CP866, СР1251 - знаю. Даже ввод могу настроить ввод в CP1251, хотя не всегда это работает.
Вот я прилагаю BAT файл его текст - это UFT8:
я извиняюсь, но я не понимаю ответов.
Я совершенно не исключаю, что я чего то не знаю о командной строке Windows. Я ее изучал лет 20 назад и тогда она была лучше документирована чем сейчас. Может я просто не знаю пути как ее переключить в режим "понимания" UTF-8? CP866, СР1251 - знаю. Даже ввод могу настроить ввод в CP1251, хотя не всегда это работает.
Вот я прилагаю BAT файл его текст - это UFT8:
Я запускаю это BAT файл в командной строке:gdalinfo "(1042)_Спутник 19_2013.jpg"
Код: Выделить всё
F:\15\Волоколамка-Балтия>я╗┐gdalinfo "(1042)_╨б╨┐╤Г╤В╨╜╨╕╨║ 19_2013.jpg"
"я╗┐gdalinfo" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
-
- Гуру
- Сообщения: 3321
- Зарегистрирован: 27 июл 2009, 19:26
- Репутация: 748
- Ваше звание: Вредитель полей
Re: GDAL и русские буквы в именах файлов Windows
Можно поэкспериментировать с установкой кодовой страницы 65001 (придется еще установить юникодовый шрифт для консоли). Результат гарантировать не могу, к большому сожалению.
- dab
- Гуру
- Сообщения: 671
- Зарегистрирован: 16 дек 2011, 20:02
- Репутация: 170
- Ваше звание: Гуру
- Откуда: Москва
- Контактная информация:
Re: GDAL и русские буквы в именах файлов Windows
Boris писал(а):хочется, что бы работало
Код: Выделить всё
set GDAL_FILENAME_IS_UTF8=NO
Код: Выделить всё
chcp 1251
Код: Выделить всё
"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
- Вложения
-
- 1.7z
- (157.2 КБ) 508 скачиваний
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: GDAL и русские буквы в именах файлов Windows
Да, dab прав. Просто если без GDAL_FILENAME_IS_UTF8=NO, то получается, что
часть команды: C:\Program Files\QGIS Dufour\bin\gdalinfo - т.е. путь до утилиты должна быть в CP1251, а передаваемые ей параметры - "(1042)_Спутник 19_2013.jpg" - в UTF8.
Предложенный вариант dab у вас заработал?
часть команды: C:\Program Files\QGIS Dufour\bin\gdalinfo - т.е. путь до утилиты должна быть в CP1251, а передаваемые ей параметры - "(1042)_Спутник 19_2013.jpg" - в UTF8.
Предложенный вариант dab у вас заработал?
-
- Гуру
- Сообщения: 3321
- Зарегистрирован: 27 июл 2009, 19:26
- Репутация: 748
- Ваше звание: Вредитель полей
Re: GDAL и русские буквы в именах файлов Windows
Это все для случая, если в путях и именах есть символы только одной кодовой страницы.
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: GDAL и русские буквы в именах файлов Windows
Затем, что мне дали совет, что надо использовать перекодировку в UTF8, что бы все работало по логике авторов GDAL/OGR утилит.dab писал(а): Вы же написали что всё работает. Зачем BAT файл в UTF-8?
Да, с установленным параметром NO, у меня на одной кодовой странице русской 1251 ( другой мне сейчас не надо, как дойду до немецкой и французской, где в Unicode есть несколько способов для обозначения букв с надстрочными знаками - начну грустить заново) - все работает.
Но в моей логике, раз есть параметр, задаваемый командной строкой, для некоторой заранее известной операционной системы, то он для чего-то создан. Я именно это и спросил - что нужно сделать, что бы из командной строки работать как это мыслится авторам программ. Ранее отмечалось, что есть программы, и их можно победить этим параметром, а есть командные файлы просто передающие параметры программе на python'е. Эти вот с русскими буквами раньше не работали.
Я не исключал, что я не знаю как UTF8 циркулирует в командной строке Win, и согласно совету, Notepad++ тут сможет помочь. Потому как утилитам GnuWin32 никакие переменные не требуются и русские буквы ее то же не смущают.
Хотелось единообразия и новых знаний.
-
- Гуру
- Сообщения: 3321
- Зарегистрирован: 27 июл 2009, 19:26
- Репутация: 748
- Ваше звание: Вредитель полей
Re: GDAL и русские буквы в именах файлов Windows
Вот потому я и предлагал:Boris писал(а):Я не исключал, что я не знаю как UTF8 циркулирует в командной строке Win, и согласно совету, Notepad++ тут сможет помочь. Потому как утилитам GnuWin32 никакие переменные не требуются и русские буквы ее то же не смущают.
Хотелось единообразия и новых знаний.
Можно поэкспериментировать с установкой кодовой страницы 65001 (придется еще установить юникодовый шрифт для консоли). Результат гарантировать не могу, к большому сожалению.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 30 гостей