一部の属性に英語以外の文字ÅÄÖが含まれているシェープファイルがいくつかあります。一部のクエリはこれらの文字(具体的には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' codec ca n't encode character u '\ xc4' in position 3:ordinal not range(128)
>>> val
「DDRÄ」
>>> type(val)
タイプ「str」
関数からの出力がどういうわけか間違っているように見えます。ÅÄÖが関与している場合はdata = u'DDR\xc4'
、(私の意図したように)戻り、戻りませんdata = 'DDRAE'
。これを引き起こす可能性があるものについて何か提案はありますか?