Mam kilka plików kształtów, w których niektóre atrybuty zawierają znaki inne niż angielskie ÅĘÖ. Ponieważ niektóre zapytania nie działają z tymi znakami (szczególnie ChangeDetector ), próbowałem je wcześniej zmienić za pomocą prostego skryptu i dodać nowe ciągi znaków do innego pola.
Jednak zmiana znaków działa dobrze, ale nie aktualizuje pola za pomocą arcpy.UpdateCursor.
Jaki jest odpowiedni sposób rozwiązania tego?
Próbowałem to zrobić również za pomocą Kalkulatora pola, umieszczając „kod” w bloku kodu, z tym samym błędem.
Komunikat o błędzie:
Błąd w czasie wykonywania Traceback (ostatnie ostatnie połączenie): Plik „”, wiersz 1, w pliku „c: /gis/python/teststring.py”, wiersz 28, w val = kod (str (prow.Typkod)) UnicodeEncodeError: Kodek „ascii” nie może zakodować znaku u '\ xc4' na pozycji 3: porządek poza zakresem (128)
Kod:
# -*- 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)
Wartości Typkod są typu: [D, D, S, DDRĘ, TRĘ] itd.
Korzystam z ArcMap Basic (10.1) w systemie Windows 7.
Nowy komunikat o błędzie:
Błąd w czasie wykonywania Traceback (ostatnie ostatnie połączenie): Plik „”, wiersz 1, w pliku „c: /gis/python/teststring.py”, wiersz 29, w val = kod (Unicode (str (wiersz. Typkod), „utf-8”)) UnicodeEncodeError: kodek „ascii” nie może zakodować znaku u '\ xc4' w pozycji 3: numer porządkowy poza zakresem (128)
>>> val
„DDRĘ”
>>> type(val)
type ”str”
Wygląda na to, że dane wyjściowe z funkcji są jakoś niepoprawne. Kiedy jest zaangażowany ÅĘÖ, wraca data = u'DDR\xc4'
i nie (tak jak to zamierzałem) data = 'DDRAE'
. Wszelkie sugestie dotyczące tego, co może to powodować?