Zmienić kodowanie źródła danych Shapefile?

9

Próbowałem zmienić jedyne kodowanie źródła danych shapefile za pomocą właściwości, a także Jak kodować pliki shapefile z LATIN1 na UTF-8? ale to nie zmienia.

Czy bez zapisania projektu QGIS nie mogę bezpośrednio zmienić kodowania źródła danych shapefile?

Próbowałem również tego kodu, pokazuje zmianę kodowania, ale kiedy ponownie otwieram plik kształtu, pokazuje to samo stare kodowanie systemowe:

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

(Nie zapisuję projektu QGIS, po prostu uzyskuję bezpośredni dostęp do pliku shapefile i zapisuję go . Kiedy zapisuję projekt i wykonuję to zadanie, to działa poprawnie )

Muhammad Faizan Khan
źródło
Możesz zajrzeć do kodu we wtyczce: shapefile_encoding_fixer
Jakob
czy mogę zapisać w pliku shapefile poprzez qgis bez zapisywania projektu?
Muhammad Faizan Khan
Czy próbowałeś kliknąć warstwę prawym przyciskiem myszy i użyć tej Save As...opcji?
Joseph
@Joseph yes man off course, już wspominam tę odpowiedź w moim poście! Skierowuję otwarty plik kształtu do projektu qgis i zmieniam jego kodowanie poprzez zapisz, ale gdy otwieram go ponownie, pozostając w systemie (niezmieniony).
Muhammad Faizan Khan
@Joseph, nie zapisałem projektu qgis, kiedy zapisuję projekt qgis i otwieram przez niego plik kształtu, to działa poprawnie!
Muhammad Faizan Khan

Odpowiedzi:

13

Z paska menu przejdź do:

Settings > Options > Data Sources > Data source handling

i odznacz ustawienie Zignoruj ​​deklarację kodowania pliku kształtu :

Ustawienie kodowania

To powoduje, że wszystkie warstwy załadowane do QGIS są domyślnie zakodowane UTF-8

Joseph
źródło
1
Dzięki @Joseph dodatkowo dla przyszłego użytkownika ten link jest także pomocny hub.qgis.org/issues/13203 . Faktycznie Ignoruj ​​zaznaczone zaznaczenie opcji kodowania pliku shapefile zignoruj ​​ustawienia utf-8. zignoruj ​​plik .cpg.
Muhammad Faizan Khan
@MohammadFaizanKhan - Witamy i dziękuję za link :)
Joseph
7

Aby podsumować inną lokalizację, w której można ustawić kodowanie:

Po otwarciu pliku kształtu: Otwórz shp jako

Po otwarciu pliku CSV: Dodaj CSV

Podczas zapisywania pliku wektorowego: Zapisz plik wektorowy jako

We właściwościach warstwy:
Właściwości warstwy

I, jak wspomniano w @Joseph, prawdopodobnie powinieneś odznaczyć ustawienie Zignoruj ​​ustawienie deklaracji kodowania pliku shapefile.

Zwycięzca
źródło
Dzięki, zwycięzco, ostatnia linia bardzo mi pomaga. hub.qgis.org/issues/13203
Muhammad Faizan Khan
3

Kiedy używasz Save As ..., musisz wybrać inną nazwę pliku i Add file to canvas.

W związku z tym MUSISZ zapisać projekt, aby umieścić w nim nowy plik kształtu. Niezapisany projekt nadal zawiera nietknięty plik kształtu i nieprawidłowe kodowanie.

BTW Data encodingwe właściwościach warstwy jest częścią pliku projektu, a nie pliku kształtu. Twój przykładowy kod nie pisze nic w pliku kształtu, zmienia tylko ustawienia warstw projektu.

AndreJ
źródło