ฉันมีรูปแบบไฟล์เล็กน้อยที่คุณสมบัติบางอย่างมีอักขระที่ไม่ใช่ภาษาอังกฤษÅÄÖ เนื่องจากข้อความค้นหาบางข้อไม่สามารถใช้งานได้กับตัวละครเหล่านี้ (โดยเฉพาะChangeDetector ) ฉันพยายามที่จะเปลี่ยนพวกเขาล่วงหน้าด้วยสคริปต์ง่าย ๆ และเพิ่มสตริงใหม่ลงในฟิลด์อื่น
อย่างไรก็ตามการเปลี่ยนแปลงในตัวละครทำงานได้ดี แต่ไม่ได้ปรับปรุงสนามด้วย arcpy.UpdateCursor
อะไรคือวิธีที่เหมาะสมในการแก้ปัญหานี้?
ฉันได้ลองทำเช่นนี้ผ่านเครื่องคิดเลขภาคสนามในขณะที่โพสต์ "รหัส" เพื่อ codeblock มีข้อผิดพลาดเดียวกัน
ข้อความแสดงข้อผิดพลาด:
ข้อผิดพลาดรันไทม์การติดตามย้อนกลับ (การโทรล่าสุดครั้งล่าสุด): ไฟล์ "", บรรทัด 1, ในไฟล์ "c: /gis/python/teststring.py", บรรทัดที่ 28, ใน val = code (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' codec ไม่สามารถเข้ารหัสอักขระ u '\ xc4' ในตำแหน่ง 3: ลำดับไม่อยู่ในช่วง (128)
>>> val
'DDRÄ'
>>> type(val)
พิมพ์ 'str'
ดูเหมือนว่าเอาต์พุตจากฟังก์ชันผิดปกติ เมื่อมี AAO ที่เกี่ยวข้องก็จะส่งกลับdata = u'DDR\xc4'
และไม่ได้ data = 'DDRAE'
(ตามที่เป็นความตั้งใจของฉัน) ข้อเสนอแนะใด ๆ เกี่ยวกับสิ่งที่อาจทำให้เกิดปัญหานี้?