Ich habe versucht, die einzige Codierung der Shapefile-Datenquelle über Eigenschaften zu ändern und auch Wie werden Shapefiles von LATIN1 nach UTF-8 codiert? aber es ändert es nicht.
Kann ich ohne Speichern des QGIS-Projekts die Codierung der Shapefile-Datenquelle nicht direkt ändern?
Ich habe auch diesen Code ausprobiert. Er zeigt die Änderungscodierung an, aber beim erneuten Öffnen des Shapefiles wird dieselbe alte Systemcodierung angezeigt:
for layer in QgsMapLayerRegistry.instance().mapLayers().values():
layer.setProviderEncoding(u'UTF-8')
layer.dataProvider().setEncoding(u'UTF-8')
print layer.name(), layer.dataProvider().encoding()
(Ich speichere kein QGIS-Projekt, sondern greife direkt auf Shapefile zu und speichere es direkt. Wenn ich das Projekt speichere und diese Aufgabe erledige, funktioniert es ordnungsgemäß. )
Save As...
Option zu verwenden?Antworten:
Gehen Sie in der Menüleiste zu:
und deaktivieren Sie die Einstellung Shapefile-Codierungsdeklaration ignorieren :
Dadurch werden alle in QGIS geladenen Ebenen so eingestellt, dass sie standardmäßig codiert werden
UTF-8
quelle
So rekapitulieren Sie den verschiedenen Ort, an dem Sie die Codierung festlegen können:
Wenn Sie ein Shapefile öffnen:
Wenn Sie eine CSV öffnen:
Wenn Sie eine Vektordatei speichern:
In den Ebeneneigenschaften:
Und wie von @Joseph erwähnt, sollten Sie wahrscheinlich die Einstellung Shapefile-Codierungsdeklaration ignorieren deaktivieren.
quelle
Wenn Sie verwenden
Save As ...
, müssen Sie einen anderen Dateinamen auswählen, undAdd file to canvas
.Infolgedessen MÜSSEN Sie auch das Projekt speichern, um das neue Shapefile darin zu erhalten. Das nicht gespeicherte Projekt enthält weiterhin das unberührte Shapefile und die falsche Codierung.
Übrigens ist das
Data encoding
in den Layer-Eigenschaften Teil der Projektdatei, nicht das Shapefile. Ihr Codebeispiel schreibt nichts in das Shapefile, sondern ändert nur die Ebeneneinstellungen des Projekts.quelle