Tengo unos shapefiles donde algunos atributos contienen caracteres no ingleses ÅÄÖ. Dado que algunas consultas no funcionan con estos caracteres (específicamente ChangeDetector), intenté cambiarlos previamente con un script simple y agregar las nuevas cadenas a otro campo.
Sin embargo, el cambio de caracteres funciona bien pero no se actualiza el campo con arcpy.UpdateCursor.
¿Cuál es una forma adecuada de resolver esto?
También he intentado hacer esto a través de la Calculadora de Campos mientras publicaba "código" en el bloque de código, con el mismo error.
~~Mensaje de error:
Error en tiempo de ejecución Traceback (llamada más reciente en último): Archivo "", línea 1, en Archivo "c:/gis/python/teststring.py", línea 28, en val = code(unicode(str(prow.Typkod), "utf-8")) UnicodeEncodeError: el códec 'ascii' no puede codificar el carácter u'\xc4' en la posición 3: ordinal no está en el rango(128)~~
Código:
# -*- 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)
Los valores de Typkod son del tipo: [D, D, S, DDRÄ, TRÄ] etc.
Utilizo ArcMap Basic (10.1) en Windows 7.
Nuevo mensaje de error:
Error en tiempo de ejecución Traceback (llamada más reciente en último): Archivo "", línea 1, en Archivo "c:/gis/python/teststring.py", línea 29, en val = code(unicode(str(row.Typkod), "utf-8")) UnicodeEncodeError: el códec 'ascii' no puede codificar el carácter u'\xc4' en la posición 3: ordinal no está en el rango(128)
>>> val
'DDRÄ'
>>> type(val)
tipo 'str'
Parece que la salida de la función está incorrecta de alguna manera. Cuando hay ÅÄÖ involucrados, devuelve data = u'DDR\xc4'
y no (como era mi intención) data = 'DDRAE'
. ¿Alguna sugerencia sobre qué podría estar causando esto?