オンラインソースからXMLファイルを解析していますが、utf-8文字の読み取りに問題があります。今、私は同様の問題を扱う他のいくつかの質問を読み通しましたが、これまでのところどの解決策も機能しません。現在、コードは次のようになっています。
class XMLParser(webapp2.RequestHandler):
def get(self):
url = fetch('some.xml.online')
xml = parseString(url.content)
vouchers = xml.getElementsByTagName("VoucherCode")
for voucher in vouchers:
if voucher.getElementsByTagName("ActivePartnership")[0].firstChild.data == "true":
coupon = Coupon()
coupon.description = str(voucher.getElementsByTagName("Description")[0].firstChild.data.decode('utf-8'))
coupon.prov_key = str(voucher.getElementsByTagName("Id")[0].firstChild.data)
coupon.put()
self.redirect('/admin/coupon')
これから発生するエラーを以下に示します。これは、説明フィールドの「ü」が原因で発生します。これは、後でデータを使用するときにも表示する必要があります。
ファイル"C:\ Users \ Vincent \ Documents \ www \ Sparkompass \ Website \ main.py"、行217、getcoupon.description = str(voucher.getElementsByTagName( "Description")[0] .firstChild.data.decode ('utf-8'))ファイル "C:\ Python27 \ lib \ encodings \ utf_8.py"、16行目、デコードリターンcodecs.utf_8_decode(input、errors、True)UnicodeEncodeError:'ascii'コーデックはエンコードできません16番目の文字u'\xfc':順序が範囲内にありません(128)
説明を削除すると、すべてが正常に機能します。データベースモデルの定義では、説明を次のように定義しました。
description = db.StringProperty(multiline=True)
試行2
私もこのようにしようとしました:
coupon.description = str(voucher.getElementsByTagName("Description")[0].firstChild.data).decode('utf-8')
それも私に与えました:
UnicodeEncodeError:'ascii'コーデックは16桁目の文字u'\ xfc'をエンコードできません:序数が範囲内にありません(128)
どんな助けでも大歓迎です!
アップデート
XMLファイルにはドイツ語が含まれています。つまり、そこに含まれる文字の多くはUTF-8文字です。したがって、理想的には、より高いレベルでデコードを行う方が良いかもしれないと今考えています。
xml = parseString(url.content)
しかし、これまでのところ、私もそれを機能させることができませんでした。これは、GAEがデータベースモデルに文字列として登録するために必要なものであるため、目的はASCIIの文字を取得することです。