일부 속성에 영어 이외의 문자 ÅÄÖ가 포함 된 모양 파일이 몇 개 있습니다. 일부 쿼리는 이러한 문자 (특히 ChangeDetector )에서 작동하지 않으므로 간단한 스크립트를 사용하여 미리 변경하고 새 문자열을 다른 필드에 추가하려고했습니다.
그러나 문자 변경은 정상적으로 작동하지만 arcpy.UpdateCursor로 필드를 업데이트하지는 않습니다.
이것을 해결하는 적절한 방법은 무엇입니까?
또한 동일한 오류로 코드 블록에 "코드"를 게시하는 동안 필드 계산기를 통해이 작업을 시도했습니다.
오류 메시지 :
런타임 오류 추적 (가장 최근 호출) : 파일 "", 줄 1, 파일 "c : /gis/python/teststring.py", 줄 28, val = code (str (prow.Typkod)) UnicodeEncodeError : 'ascii'코덱은 위치 3에서 문자 u '\ xc4'를 인코딩 할 수 없습니다. 서 수가 범위 내에 있지 않습니다 (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Ä] 등입니다.
Windows 7에서 ArcMap Basic (10.1)을 사용합니다.
새 오류 메시지 :
런타임 오류 추적 (가장 최근 호출) : 파일 "", 줄 1, 파일 "c : /gis/python/teststring.py", 줄 29, val = code (unicode (str (row. Typkod), "utf-8")) UnicodeEncodeError : 'ascii'코덱은 위치 3에서 문자 u '\ xc4'를 인코딩 할 수 없습니다. 서수는 범위 내에 있지 않습니다 (128)
>>> val
'DDRÄ'
>>> type(val)
유형 'str'
함수의 출력이 어떻게 든 잘못 된 것처럼 보입니다. ÅÄÖ이 관련되어있을 때 data = u'DDR\xc4'
(내 의도대로) 반환 하지 않습니다 data = 'DDRAE'
. 이 문제의 원인에 대한 제안 사항이 있습니까?