Seite 1 von 1

Fehler bei Umlauten (arcpy.da.InsertCursor)

Verfasst: Sonntag 27. September 2015, 21:22
von M-Dot_G-Punkt
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)

Re: Fehler bei Umlauten (arcpy.da.InsertCursor)

Verfasst: Sonntag 27. September 2015, 22:46
von snafu
Woran merkst du, dass es nicht funktioniert? Kommt eine Fehlermeldung? Falls ja, dann poste diese doch bitte.

Re: Fehler bei Umlauten (arcpy.da.InsertCursor)

Verfasst: Montag 28. September 2015, 07:00
von sparrow
Und die Python-Version, die du verwendest.

Re: Fehler bei Umlauten (arcpy.da.InsertCursor)

Verfasst: Dienstag 29. September 2015, 14:54
von M-Dot_G-Punkt
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")]

Re: Fehler bei Umlauten (arcpy.da.InsertCursor)

Verfasst: Dienstag 29. September 2015, 15:54
von cofi
Nein, es erwartet nur keine Bytestrings (oder zumindest in einer anderen Kodierung), sondern Unicodeobjekte. Es gibt Unicodeliterale:

Code: Alles auswählen

zeile = [u"ä", u"ö"]

Re: Fehler bei Umlauten (arcpy.da.InsertCursor)

Verfasst: Dienstag 29. September 2015, 20:28
von M-Dot_G-Punkt
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?

Re: Fehler bei Umlauten (arcpy.da.InsertCursor)

Verfasst: Dienstag 29. September 2015, 21:13
von 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.