Страница 1 из 1
Перекодировать shp-ы из cp1251 в utf-8
Добавлено: 04 окт 2016, 16:15
loginov.aleks
Доброго времени суток дорогие форумчане.
Прошу вашей помощи.
Требуется большое количество shp-ов залить на ms sql сервер, а шейпы изночально в cp1251 были созданы, помогите перекодировать.
Win 7 x64. пытаюсь перекодировать шейпы вот так:
SET PATH="C:\Program Files\PostgreSQL\pg95\bin"
SET GDAL_FILENAME_IS_UTF-8=OFF
ogr2ogr -lco ENCODING=UTF-8 "220 Кудьма - Зелецино.shp" "220 Кудьма - Зелецино.shp" --config CPL_DEBUG ON
pause
Вывод получается такой. Не нагуглил ни чего сам . Не бейте камнями.

Re: Перекодировать shp-ы из cp1251 в utf-8
Добавлено: 04 окт 2016, 16:48
jerry-maori
GDAL не может понять кириллические имена, да ещё и с пробелами...
В итоге он понимает файл "220 какое_то_название.shp" как что=то мерзкое и плюётся от этого.
Найдите какой-нито пакетный переименователь и загоните всё в латиницу. Хочется проблов в названиях -- меняйте на "_".
И будет вам счастие.
P.S.: Привет землякам из НН.
Re: Перекодировать shp-ы из cp1251 в utf-8
Добавлено: 05 окт 2016, 08:12
loginov.aleks
jerry-maori писал(а):GDAL не может понять кириллические имена, да ещё и с пробелами...
В итоге он понимает файл "220 какое_то_название.shp" как что=то мерзкое и плюётся от этого.
Найдите какой-нито пакетный переименователь и загоните всё в латиницу. Хочется проблов в названиях -- меняйте на "_".
И будет вам счастие.
P.S.: Привет землякам из НН.
Очень приятно)

Принял ваш совет на вооружение. Все отработало, но не получил, чего хотел в итоге.

На выходе у меня вышли кракозябры.

Я так понимаю ogr2ogr не знает какую кодировку он получает на входе?

Re: Перекодировать shp-ы из cp1251 в utf-8
Добавлено: 05 окт 2016, 08:12
loginov.aleks
jerry-maori писал(а):GDAL не может понять кириллические имена, да ещё и с пробелами...
В итоге он понимает файл "220 какое_то_название.shp" как что=то мерзкое и плюётся от этого.
Найдите какой-нито пакетный переименователь и загоните всё в латиницу. Хочется проблов в названиях -- меняйте на "_".
И будет вам счастие.
P.S.: Привет землякам из НН.
Очень приятно)

Принял ваш совет на вооружение. Все отработало, но не получил, чего хотел в итоге.

На выходе у меня вышли кракозябры.

Я так понимаю ogr2ogr не знает какую кодировку он получает на входе?

Re: Перекодировать shp-ы из cp1251 в utf-8
Добавлено: 05 окт 2016, 09:14
bolotoved
Да, совершенно верно, в случае с шейпами GDAL не знает в какой он кодировке и поэтому вначале нужно указать исходную кодировку перед тем как перекодировать.
В linux это делается так:
Код: Выделить всё
# устанавливаем исходную кодировку
export SHAPE_ENCODING="windows-1251"
# перекодируем в нужную
ogr2ogr output.shp input.shp -lco ENCODING=UTF-8
В Windows, наверное, нужно использовать:
Еще может возникнуть проблема обрезания строки (поскольку в UTF-8 кириллические буквы кодируются 2-мя байтами, а не одним, как в CP-1251). Этого может и не произойти, если длина строчного поля в шейпе с запасом.
Re: Перекодировать shp-ы из cp1251 в utf-8
Добавлено: 05 окт 2016, 11:31
loginov.aleks
bolotoved писал(а):Да, совершенно верно, в случае с шейпами GDAL не знает в какой он кодировке и поэтому вначале нужно указать исходную кодировку перед тем как перекодировать.
В linux это делается так:
Код: Выделить всё
# устанавливаем исходную кодировку
export SHAPE_ENCODING="windows-1251"
# перекодируем в нужную
ogr2ogr output.shp input.shp -lco ENCODING=UTF-8
В Windows, наверное, нужно использовать:
Еще может возникнуть проблема обрезания строки (поскольку в UTF-8 кириллические буквы кодируются 2-мя байтами, а не одним, как в CP-1251). Этого может и не произойти, если длина строчного поля в шейпе с запасом.
Пробовал много вариантов:
SET SHAPE_ENICODING = "1251"
SET SHAPE_ENICODING = "windows-1251"
SET SHAPE_ENICODING = "CP1251"
В итоге тоже самое.
Поиском по форуму нашел такой способ:
1. Создать текстовый файл input.cpg и записать в него кодировку:
CP1251
2. Выполнить команду ogr2ogr -lco ENCODING=UTF8 output.shp input.shp --config CPL_DEBUG ON
Опять же не получилось, но кракозябры другие, и если файлик dbf открыть DBFNavigator-ом и сменить там кодировку с DOS на Win, то все замечательно.
Не знаю что и делать уже, все голову сломал
Ваш способ тоже пробовал ogr2ogr output.shp input.shp -lco ENCODING=UTF-8
Re: Перекодировать shp-ы из cp1251 в utf-8
Добавлено: 05 окт 2016, 12:23
bolotoved
приложите пример файла
Re: Перекодировать shp-ы из cp1251 в utf-8
Добавлено: 05 окт 2016, 12:41
loginov.aleks
bolotoved писал(а):приложите пример файла
к сожалению только так
https://cloud.mail.ru/public/DkKR/NtD9LCq3K
Re: Перекодировать shp-ы из cp1251 в utf-8
Добавлено: 05 окт 2016, 13:48
bolotoved
Все никак не могу привыкнуть. Ваш файл перекодировал под linux следующим образом:
К шейп-файлу, который нужно перекодировать нужно приложить файл с разрешением *.cpg содержащим строку "CP1251" (без кавычек!).
Далее выполняем перекодирование:
Код: Выделить всё
ogr2ogr -lco ENCODING="UTF-8" output.shp PS_2.shp
Там у вас еще одно поле названо на кириллице, при перекодировке оно обрезается.
Если нужно посмотреть, какие проблемы происходят в ходе перекодирования, то выполняем:
Код: Выделить всё
ogr2ogr -lco ENCODING="UTF-8" output.shp PS_2.shp --config CPL_DEBUG ON
Re: Перекодировать shp-ы из cp1251 в utf-8
Добавлено: 05 окт 2016, 14:08
loginov.aleks
bolotoved писал(а):Все никак не могу привыкнуть. Ваш файл перекодировал под linux следующим образом:
К шейп-файлу, который нужно перекодировать нужно приложить файл с разрешением *.cpg содержащим строку "CP1251" (без кавычек!).
Далее выполняем перекодирование:
Код: Выделить всё
ogr2ogr -lco ENCODING="UTF-8" output.shp PS_2.shp
Там у вас еще одно поле названо на кириллице, при перекодировке оно обрезается.
Если нужно посмотреть, какие проблемы происходят в ходе перекодирования, то выполняем:
Код: Выделить всё
ogr2ogr -lco ENCODING="UTF-8" output.shp PS_2.shp --config CPL_DEBUG ON
Большое спасибо) Только перестала работать программа, через которую я импортирую Shape2Sql.exe
http://www.sharpgis.net/page/shape2sql
Re: Перекодировать shp-ы из cp1251 в utf-8
Добавлено: 05 окт 2016, 14:24
bolotoved
В GDAL есть драйвер для импорта в БД MS SQL, никогда этим не занимался, но процесс достаточно подробно описан например тут:
https://alastaira.wordpress.com/ogr2ogr ... ql-server/
Re: Перекодировать shp-ы из cp1251 в utf-8
Добавлено: 05 окт 2016, 14:58
freeExec
Там вроде бы обычная .db которую можно в excel и ко без проблем персохранить с расширением полей если не лезут.
Re: Перекодировать shp-ы из cp1251 в utf-8
Добавлено: 05 окт 2016, 20:15
trir
PowerShell
Код: Выделить всё
$exe = "C:\NextGIS_QGIS\bin\ogr2ogr.exe"
&$exe --config GDAL_DATA "C:\NextGIS_QGIS\share\gdal" -lco ENCODING=UTF-8 -overwrite -s_srs "EPSG:4326" -t_srs "EPSG:32641" -f "ESRI Shapefile" C:\work1\poi\poi-point_utm.shp C:\work1\poi\poi-point.shp
Код: Выделить всё
$exe = "C:\NextGIS_QGIS\bin\ogr2ogr.exe"
&$exe --config GDAL_DATA "C:\NextGIS_QGIS\share\gdal" -overwrite -f "MSSQLSpatial" "MSSQL:server=localhost\SQLExpress;database=test2;trusted_connection=yes;" "C:\work1\poi\poi-point_utm.shp"