У мене є декілька форм-файлів, де деякі атрибути містять неанглійські символи ÅÄÖ. Оскільки деякі запити не працюють з цими символами (зокрема ChangeDetector ), я спробував їх змінити заздалегідь простим сценарієм і додати нові рядки до іншого поля.
Однак зміна символів працює добре, але не оновлює поле за допомогою arcpy.UpdateCursor.
Який належний спосіб вирішити це?
Я також спробував це зробити за допомогою калькулятора поля, публікуючи "код" в блоці коду, з тією ж помилкою.
Повідомлення про
помилку: Відстеження помилки виконання (останній дзвінок останній): Файл "", рядок 1, у файлі "c: /gis/python/teststring.py", рядок 28, у val = код (str (prow.Typkod)) UnicodeEncodeError: кодек 'ascii' не може кодувати символ u '\ xc4' у позиції 3: порядковий не знаходиться в діапазоні (128)
Код:
# -*- 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)
Значення Typkod мають тип: [D, D, S, DDRÄ, TRÄ] тощо.
Я використовую ArcMap Basic (10.1) в Windows 7.
Нове повідомлення про
помилку: Відстеження помилки під час виконання (останній виклик останній): Файл "", рядок 1, у файлі "c: /gis/python/teststring.py", рядок 29, у val = code (unicode (str (рядок) Typkod), "utf-8")) UnicodeEncodeError: "ascii" кодек не може кодувати символ u '\ xc4' у позиції 3: порядковий не знаходиться в діапазоні (128)
>>> val
'DDRÄ'
>>> type(val)
тип 'str'
Схоже, що вихід з функції якимось чином неправильний. Коли є ÅÄÖ, він повертається, data = u'DDR\xc4'
а не (як я мав намір) data = 'DDRAE'
. Будь-які пропозиції щодо того, що може спричинити це?