Изменить кодировку источника данных Shapefile?

9

Я попытался изменить единственную кодировку источника данных шейп-файла через свойства, а также Как кодировать шейп-файлы из LATIN1 в UTF-8? но это не меняет его.

Без сохранения проекта QGIS я не могу напрямую изменить кодировку источника данных shapefile?

Я также попробовал этот код, он показывает кодировку изменений, но когда я снова открываю шейп-файл, он показывает ту же старую кодировку системы:

for layer in QgsMapLayerRegistry.instance().mapLayers().values():
    layer.setProviderEncoding(u'UTF-8')
    layer.dataProvider().setEncoding(u'UTF-8')
    print layer.name(), layer.dataProvider().encoding()  

(Я не сохраняю проект QGIS, просто получаю доступ и сохраняю шейп-файл напрямую. Когда я сохраняю проект и выполняю эту задачу, он работает правильно )

Мухаммед Файзан Хан
источник
Вы можете взглянуть на код в плагине: shapefile_encoding_fixer
Jakob
Могу ли я сохранить в шейп-файл через QGIS без сохранения проекта?
Мухаммед Файзан Хан
Вы пробовали щелкнуть правой кнопкой мыши по своему слою и использовать Save As...опцию?
Джозеф
@ Джозеф, да, конечно, я уже упоминал этот ответ в своем посте! Я направляю открытый файл формы в проект qgis и изменяю его кодировку через save as, но когда я открываю его снова, он остается в системе (без изменений).
Мухаммед Файзан Хан
@ Джозеф Я не сохранил проект QGIS, когда я сохраняю проект QGIS и открываю файл формы через него, он работает правильно!
Мухаммад Файзан Хан

Ответы:

13

Из меню перейдите по ссылке:

Settings > Options > Data Sources > Data source handling

и снимите флажок с параметром объявления игнорирования кодировки шейп-файла :

Настройка кодировки

Это устанавливает все слои, загруженные в QGIS, для кодирования по умолчанию в UTF-8

Джозеф
источник
1
Спасибо @Joseph дополнительно для будущего пользователя, эта ссылка также полезна hub.qgis.org/issues/13203 . На самом деле опция Ignore флажок объявления кодировки shapefile игнорирует настройки utf-8. его игнорировать .cpg файл.
Мухаммед Файзан Хан
@MohammadFaizanKhan - Добро пожаловать и спасибо за ссылку :)
Джозеф
7

Чтобы перепросмотреть другое место, где вы можете установить кодировку:

Когда вы открываете шейп-файл: Открой шп как

Когда вы открываете CSV: Добавить CSV

Когда вы сохраняете векторный файл: Сохранить векторный файл как

В свойствах слоя:
Свойства слоя

И, как упоминалось @Joseph, вам, вероятно, следует снять флажок с параметром объявления игнорирования кодировки шейп-файла.

Виктор
источник
Спасибо, Виктор, твоя последняя строчка мне очень помогла. hub.qgis.org/issues/13203
Мухаммед Файзан Хан
3

Когда вы используете Save As ..., вы должны выбрать другое имя файла, и Add file to canvas.

Как следствие, вы ДОЛЖНЫ сохранить проект, чтобы получить новый шейп-файл. Несохраненный проект все еще содержит нетронутый шейп-файл и неправильную кодировку.

Кстати, Data encodingсвойства Layer являются частью файла проекта, а не шейп-файлом. Ваш пример кода ничего не записывает в шейп-файл, он меняет только настройки слоя проекта.

Andrej
источник