Перекодировать shp-ы из cp1251 в utf-8

Не знаете, где задать вопрос? Задавайте здесь.
Ответить
loginov.aleks
Интересующийся
Сообщения: 40
Зарегистрирован: 12 сен 2016, 10:14
Репутация: 1

Перекодировать shp-ы из cp1251 в utf-8

Сообщение loginov.aleks » 04 окт 2016, 16:15

Доброго времени суток дорогие форумчане.
Прошу вашей помощи.

Требуется большое количество 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

Вывод получается такой. Не нагуглил ни чего сам . Не бейте камнями. :oops:
Изображение

Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 143
Откуда: Нижний Новгород

Re: Перекодировать shp-ы из cp1251 в utf-8

Сообщение jerry-maori » 04 окт 2016, 16:48

GDAL не может понять кириллические имена, да ещё и с пробелами...
В итоге он понимает файл "220 какое_то_название.shp" как что=то мерзкое и плюётся от этого.
Найдите какой-нито пакетный переименователь и загоните всё в латиницу. Хочется проблов в названиях -- меняйте на "_".
И будет вам счастие.
P.S.: Привет землякам из НН.

loginov.aleks
Интересующийся
Сообщения: 40
Зарегистрирован: 12 сен 2016, 10:14
Репутация: 1

Re: Перекодировать shp-ы из cp1251 в utf-8

Сообщение loginov.aleks » 05 окт 2016, 08:12

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

Изображение
На выходе у меня вышли кракозябры. :cry: Я так понимаю ogr2ogr не знает какую кодировку он получает на входе?
Изображение

loginov.aleks
Интересующийся
Сообщения: 40
Зарегистрирован: 12 сен 2016, 10:14
Репутация: 1

Re: Перекодировать shp-ы из cp1251 в utf-8

Сообщение loginov.aleks » 05 окт 2016, 08:12

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

Изображение
На выходе у меня вышли кракозябры. :cry: Я так понимаю ogr2ogr не знает какую кодировку он получает на входе?
Изображение

bolotoved
Гуру
Сообщения: 920
Зарегистрирован: 30 дек 2008, 14:11
Репутация: 236
Откуда: Ханты-Мансийск
Контактная информация:

Re: Перекодировать shp-ы из cp1251 в utf-8

Сообщение bolotoved » 05 окт 2016, 09:14

Да, совершенно верно, в случае с шейпами GDAL не знает в какой он кодировке и поэтому вначале нужно указать исходную кодировку перед тем как перекодировать.

В linux это делается так:

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

# устанавливаем исходную кодировку
export SHAPE_ENCODING="windows-1251"

# перекодируем в нужную
ogr2ogr output.shp input.shp -lco ENCODING=UTF-8
В Windows, наверное, нужно использовать:

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

SET SHAPE_ENCODING="windows-1251"
Еще может возникнуть проблема обрезания строки (поскольку в UTF-8 кириллические буквы кодируются 2-мя байтами, а не одним, как в CP-1251). Этого может и не произойти, если длина строчного поля в шейпе с запасом.

loginov.aleks
Интересующийся
Сообщения: 40
Зарегистрирован: 12 сен 2016, 10:14
Репутация: 1

Re: Перекодировать shp-ы из cp1251 в utf-8

Сообщение loginov.aleks » 05 окт 2016, 11:31

bolotoved писал(а):Да, совершенно верно, в случае с шейпами GDAL не знает в какой он кодировке и поэтому вначале нужно указать исходную кодировку перед тем как перекодировать.

В linux это делается так:

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

# устанавливаем исходную кодировку
export SHAPE_ENCODING="windows-1251"

# перекодируем в нужную
ogr2ogr output.shp input.shp -lco ENCODING=UTF-8
В Windows, наверное, нужно использовать:

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

SET SHAPE_ENCODING="windows-1251"
Еще может возникнуть проблема обрезания строки (поскольку в 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

bolotoved
Гуру
Сообщения: 920
Зарегистрирован: 30 дек 2008, 14:11
Репутация: 236
Откуда: Ханты-Мансийск
Контактная информация:

Re: Перекодировать shp-ы из cp1251 в utf-8

Сообщение bolotoved » 05 окт 2016, 12:23

приложите пример файла

loginov.aleks
Интересующийся
Сообщения: 40
Зарегистрирован: 12 сен 2016, 10:14
Репутация: 1

Re: Перекодировать shp-ы из cp1251 в utf-8

Сообщение loginov.aleks » 05 окт 2016, 12:41

bolotoved писал(а):приложите пример файла
к сожалению только так
https://cloud.mail.ru/public/DkKR/NtD9LCq3K

bolotoved
Гуру
Сообщения: 920
Зарегистрирован: 30 дек 2008, 14:11
Репутация: 236
Откуда: Ханты-Мансийск
Контактная информация:

Re: Перекодировать shp-ы из cp1251 в utf-8

Сообщение bolotoved » 05 окт 2016, 13:48

Все никак не могу привыкнуть. Ваш файл перекодировал под 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

loginov.aleks
Интересующийся
Сообщения: 40
Зарегистрирован: 12 сен 2016, 10:14
Репутация: 1

Re: Перекодировать shp-ы из cp1251 в utf-8

Сообщение loginov.aleks » 05 окт 2016, 14:08

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

bolotoved
Гуру
Сообщения: 920
Зарегистрирован: 30 дек 2008, 14:11
Репутация: 236
Откуда: Ханты-Мансийск
Контактная информация:

Re: Перекодировать shp-ы из cp1251 в utf-8

Сообщение bolotoved » 05 окт 2016, 14:24

В GDAL есть драйвер для импорта в БД MS SQL, никогда этим не занимался, но процесс достаточно подробно описан например тут: https://alastaira.wordpress.com/ogr2ogr ... ql-server/

freeExec
Гуру
Сообщения: 1195
Зарегистрирован: 23 апр 2011, 10:32
Репутация: 205
Откуда: Ульяновск

Re: Перекодировать shp-ы из cp1251 в utf-8

Сообщение freeExec » 05 окт 2016, 14:58

Там вроде бы обычная .db которую можно в excel и ко без проблем персохранить с расширением полей если не лезут.

trir
Гуру
Сообщения: 5355
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Перекодировать shp-ы из cp1251 в utf-8

Сообщение trir » 05 окт 2016, 20:15

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"

Ответить

Вернуться в «Я новичок!»

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

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