Обновлено 25.12.2014, 20.01.2015
Начиная с версии ArcGIS for Desktop 10.2.1 перешел на экспорт данных в форматы шейп-файлов и dbf-таблиц в кодировку UTF-8 (см.http://support.esri.com/en/knowledgebase/techarticles/detail/21106).
Причиной этого перехода является то, что кодировка UTF-8 в настоящее время является стандартом де-факто для многих программных средств и файлов, а также для ArcGIS Online.
В соответствии с описанием шейп-файла при экспорте в шейп-файл из ArcGIS for Desktop создается файл *.cpg c содержимым, состоящим из одной строки: UTF-8
При отсутствии этого файла (или в случае, если внешнее приложение не предназначено для работы с такими файлами, как, например, MS Excel) содержимое экспортированного шейп-файла или таблицы dbf читается некорректно.
Установка значения dbfDefault в реестре, что описано в статье 21106 для предыдущих версий ArcGIS, в версиях 10.2.1 и 10.2.2 исходно не поддерживается.
Эту проблему решает обновление для версий 10.2.1 и 10.2.2 «ArcGIS 10.2.1-10.2.2 for (Desktop, Engine, Server) Set Shapefile Default Code Page Patch». Для версии 10.3 установка обновления не требуется, эта версия поддерживает установку кодировки с помощью редактирования реестра.
ArcGIS 10.2.x и 10.3 корректно читает шейп-файлы и таблицы dbf, сохраненные в различных кодировках, например, 1251 (Windows, ANSI), 866 (MSDOS, OEM) и др. Чтение содержимого файлов осуществляется в соответствии со значением codepage (кодовая страница), указанном в заголовке dbf-файла. В случае некорректной установки кодовой страницы в заголовке, содержимое файла читается некорректно.
Изменить установку кодовой страницы в заголовке файлов, уже созданных в новой версии ArcGIS for Desktop, и/или изменить кодировку данных можно с помощью различных программ, например, с помощью DBFShow. Установить корректную кодировку в программе DBFShow можно с помощью пунктов меню «Разное/Кодировка», при этот установленное значение записывается в заголовок dbf-файла. Перекодировать dbf-файл можно в программе DBFShow можно с помощью пунктов меню «Инструменты/Конвертировать кодировки». DBFShow не требует установки, начинает работать сразу после загрузки.
Перекодировать dbf-файлы можно также с помощью скрипта Python.
Сотрудники технической поддержки Esri CIS выражают благодарность автору программы DBFShow, Ардашову В.А. за отличный продукт и Максиму Дубинину (GIS-Lab) за очень полезную статью.
Другие проблемы из-за сохранения данных в UTF, возникающие при экспорте информации, содержащей кириллицу, в шейп-файлы.
- В версии 10.2.1 в случае, если в названии столбца содержится подчеркивание и за подчеркиванием следует два или более символа, включающие кириллицу или любые другие национальные символы (пример: новое_поле), значения этого столбца при экспорте в шейп-файл искажаются. Если столбец текстовый, то значения пропадают. Если столбец числовой, то значения приравниваются нулю. В версии 10.2.2 обнуляется числовое поле, если в нем три или более символа, включающие кириллицу или любые другие национальные символы. С текстовыми полями всё обстоит так же, как в версии 10.2.1.
Путь решения проблемы: никогда не называйте столбцы таблиц и классов объектов по-русски, в названиях самих таблиц/классов объктов тоже лучше не использовать кириллицу. Это позволит избегать многих проблем. В БГД для русских названий таблиц, классов объектов и столбцов есть псевдонимы, которые предназначены и для названий с пробелами, и для кириллицы. В шейп-файлах придется мириться с латиницей.
Данная проблема зарегистрирована разработчиком #NIM101154 Exporting a feature class into a shape file in 10.2.1. Fields with Cyrillic characters are truncated, and data is lost. Данная проблема не решена в выпущенном обновлении «ArcGIS 10.2.1-10.2.2 for (Desktop, Engine, Server) Set Shapefile Default Code Page Patch». Проблема решена в версии 10.3, при экспорте названия полей автоматически отрезаются так, что после подчеркивания остается один знак, но для сохранения полной информации в полях приходится устанавливать кодировку 1251 в реестре.
- В случае если в значениях столбца (поля) содержится кириллица или любые другие национальные символы, при экспорте в шейп-файл реальная длина поля уменьшается в два раза. Информация, которая выходит за реальную длину поля при экспорте в шейп-файл автоматически обрезается. Пример: длина поля «Тип» равна 16 символам, в БГД было значение «Широколиственные», в шейп-файле будет «Широколи». Проблема появилась в версиях 10.2.1, 10.2.2. Проблема зарегистрирована разработчиком NIM102120 Allow the setting of the CodePage for shapefiles in the AdvanceArcMapSettings tool. Проблема не решена полностью в версии 10.3. После решения можно будет с помощью приложения C:\Program Files (x86)\ArcGIS\Desktop10.х\Utilities\AdvancedArcMapSettings.exe установить кодировку по умолчанию для экспорта в шейп-файлы или DBF-таблицы. Про утилиту AdvancedArcMapSettings знают лишь немногие, но она помогает решать многие проблемы при работе с Desktop, включая ограничения при печати карт и экспорте карт в растр.
Варианты решения проблемы:
- Для версий 10.2.1 и 10.2.2: установить обновление «ArcGIS 10.2.1-10.2.2 for (Desktop, Engine, Server) Set Shapefile Default Code Page Patch» и в реестре установить кодировку 1251.
- Для версии 10.3: в реестре установить кодировку 1251.
- Вместо экспорта сделать новый пустой шейп-файл, создать в нем структуру полей аналогичную исходному классу объектов, установить необходимую длину текстовых полей, загрузить данные с помощью простого загрузчика данных. К сожалению, при создании шейп-файла невозможно импортировать структуру полей. Если полей достаточно много, можно создать новый пустой класс объектов в БГД, импортировать в него структуру полей из имеющегося шей-файла, потом этот пустой класс объектов экспортировать в шейп-файл.
- Обновление от 10.06.2019. Для ArcGIS Pro можно использовать рекомендации из статьи https://support.esri.com/en/technical-article/000013192, но раздел реестра в этом случае должен быть другим. Для Pro раздел Common надо создать в разделе HKEY_CURRENT_USER\Software\ESRI\ArcGISPro. В этом разделе Common нужно создать раздел Codepage и в нем строковый параметр dbfDeafault. Для установки кодировки Windows, которая наиболее широко распространена, пропишите значение параметра dbfDefault, равное 1251. После этого перезапустите ArcGIS Pro. После этого выходные шейп-файлы должны создаваться в кодировке Windows, а в файл *.cpg должна записываться строка «ANSI 1251».