Fehler bei Umlauten (arcpy.da.InsertCursor)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
M-Dot_G-Punkt
User
Beiträge: 8
Registriert: Sonntag 27. September 2015, 20:57

Im Arcpy-Modul von Esri bringt mich InsertCurser zum Verzweifeln. Es lassen sich keine Umlaute in die Tabelle schreiben. Hier ein kleines Testscript. Kennt jemand das Problem?

Code: Alles auswählen

# -*- coding: iso-8859-1 -*- 
import arcpy, os
from arcpy import env
env.overwriteOutput = 1
env.workspace = r".\Test.gdb"

# GDB anlegen
gdbName = "Test.gdb"
arcpy.CreateFileGDB_management(".", gdbName)

#Tabelle anlegen
tabName = "Umlaute"
arcpy.CreateTable_management(gdbName, tabName)

# Felder anlegen
arcpy.AddField_management(tabName, "Spalte1", "TEXT", "", "", 10)
arcpy.AddField_management(tabName, "Spalte2", "TEXT", "", "", 10)

#Daten in Zeile schreiben        
zeile = ["ä", "ö"]
rows = arcpy.da.InsertCursor(".\Test.gdb\Umlaute", ["Spalte1", "Spalte2"])
rows.insertRow(zeile)
Zuletzt geändert von Anonymous am Sonntag 27. September 2015, 21:47, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Woran merkst du, dass es nicht funktioniert? Kommt eine Fehlermeldung? Falls ja, dann poste diese doch bitte.
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Und die Python-Version, die du verwendest.
M-Dot_G-Punkt
User
Beiträge: 8
Registriert: Sonntag 27. September 2015, 20:57

Es ist ein Codierungsfehler mit den Umlauten aufgetreten. InsertCursor wertet allem Anschein nach die Magic-Line nicht aus.

Ich verwende ArcGis 10.1 mit Pathon27.

Habe inzwischen eine Lösung gefunden. InsertCursor benötigt scheinbar eine direkte Codierung.
zeile = ["ä".decode("iso-8859-1"), "ö".decode("iso-8859-1")]
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Nein, es erwartet nur keine Bytestrings (oder zumindest in einer anderen Kodierung), sondern Unicodeobjekte. Es gibt Unicodeliterale:

Code: Alles auswählen

zeile = [u"ä", u"ö"]
M-Dot_G-Punkt
User
Beiträge: 8
Registriert: Sonntag 27. September 2015, 20:57

cofi hat geschrieben:Nein, es erwartet nur keine Bytestrings (oder zumindest in einer anderen Kodierung), sondern Unicodeobjekte. Es gibt Unicodeliterale:

Code: Alles auswählen

zeile = [u"ä", u"ö"]
Danke! Genial. Wie wende ich die Unicodeliterale mit einer Variable an?
BlackJack

@M-Dot_G-Punkt: Gar nicht, es sind halt literale Werte. Wenn der Text nicht direkt im Quelltext steht ist die Frage wo er herkommt. An der Stelle muss man ansetzen und die Bytes so früh wie möglich in Unicode-Objekte umwandeln und programmintern dann Texte nur als Unicode zu vearbeiten.
Antworten