Tôi có một vài shapefile trong đó một số thuộc tính chứa các ký tự không phải tiếng Anh. Vì một số truy vấn không hoạt động với các ký tự này (cụ thể là ChangeDetector ), tôi đã cố gắng thay đổi chúng trước bằng một tập lệnh đơn giản và thêm các chuỗi mới vào trường khác.
Tuy nhiên, thay đổi trong các ký tự hoạt động tốt nhưng không cập nhật trường với arcpy.UpdateC tiền.
Một cách thích hợp để giải quyết điều này là gì?
Tôi cũng đã cố gắng thực hiện điều này thông qua Máy tính Trường trong khi đăng "mã" lên codeblock, với cùng một lỗi.
Thông báo lỗi:
Lỗi thời gian chạy TracBack (cuộc gọi gần đây nhất): Tệp "", dòng 1, trong Tệp "c: /gis/python/testopes.py", dòng 28, trong val = code (str (prow.Typkod)) UnicodeEncodeError: 'ascii' codec không thể mã hóa ký tự u '\ xc4' ở vị trí 3: thứ tự không nằm trong phạm vi (128)
Mã số:
# -*- 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)
Các giá trị của typkod thuộc loại: [D, D, S, DDRÄ, TRÄ], v.v.
Tôi sử dụng ArcMap Basic (10.1) trên Windows 7.
Thông báo lỗi mới: Lỗi thời
gian chạy TracBack (cuộc gọi gần đây nhất): Tệp "", dòng 1, trong Tệp "c: /gis/python/testopes.py", dòng 29, trong val = code (unicode (str (row. Typkod), "utf-8")) UnicodeEncodeError: 'ascii' codec không thể mã hóa ký tự u '\ xc4' ở vị trí 3: thứ tự không nằm trong phạm vi (128)
>>> val
'DDRÄ'
>>> type(val)
loại 'str'
Có vẻ như đầu ra từ chức năng là sai. Khi có liên quan, nó trở lại data = u'DDR\xc4'
và không (như ý định của tôi) data = 'DDRAE'
. Bất kỳ đề xuất về những gì có thể gây ra điều này?