我有一些shapefile,其中某些属性包含非英语字符ÅÄÖ。由于某些查询不适用于这些字符(特别是ChangeDetector),因此我尝试使用一个简单的脚本预先更改它们,并将新字符串添加到另一个字段中。
但是,更改字符效果很好,但不能使用arcpy.UpdateCursor更新该字段。
解决这个问题的合适方法是什么?
我也曾尝试通过字段计算器来执行此操作,同时将“代码”发布到代码块中,出现相同的错误。
错误消息:
运行时错误回溯(最近一次调用最近):文件“”,行1,在文件“ c:/gis/python/teststring.py”,行28,在val =代码(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'
。关于什么可能导致此的任何建议?