Ho alcuni shapefile in cui alcuni degli attributi contengono i caratteri non inglesi ÅÄÖ. Poiché alcune query non funzionano con questi caratteri (in particolare ChangeDetector ), ho provato a modificarli in anticipo con un semplice script e aggiungere le nuove stringhe in un altro campo.
Tuttavia, la modifica dei caratteri funziona correttamente ma non aggiorna il campo con arcpy.UpdateCursor.
Qual è un modo appropriato per risolvere questo?
Ho anche provato a farlo tramite il calcolatore di campo durante la pubblicazione di "codice" nel blocco codice, con lo stesso errore.
Messaggio di errore:
errore di runtime Traceback (ultima chiamata più recente): file "", riga 1, nel file "c: /gis/python/teststring.py", riga 28, in val = code (str (prow.Typkod)) UnicodeEncodeError: il codec 'ascii' non può codificare il carattere u '\ xc4' in posizione 3: ordinale non compreso nell'intervallo (128)
Codice:
# -*- coding: cp1252 -*-
def code(infield):
data = ''
for i in infield:
## print i
if i == 'Ä':
data = data + 'AE'
elif i == 'ä':
data = data + 'ae'
elif i == 'Å':
data = data + 'AA'
elif i == 'å':
data = data + 'aa'
elif i == 'Ö':
data = data + 'OE'
elif i == 'ö':
data = data + 'oe'
else:
data = data + i
return data
shp = r'O:\XXX\250000\DB\ArcView\shape.shp'
prows = arcpy.UpdateCursor(shp)
for prow in prows:
val = code(unicode(str(prow.Typkod), "utf-8"))
prow.Typkod_U = val
print val
prows.updateRow(prow)
I valori di Typkod sono del tipo: [D, D, S, DDRÄ, TRÄ] ecc.
Uso ArcMap Basic (10.1) su Windows 7.
Nuovo messaggio di errore:
Errore di runtime Traceback (ultima chiamata più recente): file "", riga 1, nel file "c: /gis/python/teststring.py", riga 29, in val = code (unicode (str (riga. Typkod), "utf-8")) UnicodeEncodeError: il codec 'ascii' non può codificare il carattere u '\ xc4' in posizione 3: ordinale non nell'intervallo (128)
>>> val
'DDRÄ'
>>> type(val)
digitare 'str'
Sembra che l'output della funzione sia in qualche modo sbagliato. Quando c'è ÅÄÖ coinvolto, ritorna data = u'DDR\xc4'
e non (come era mia intenzione) data = 'DDRAE'
. Qualche suggerimento su cosa potrebbe causare questo?