現在、Linux (Ubuntu) でのコーディング/エンコーディングに重大な問題があります。以前はこれに対処する必要がなかったので、なぜこれが実際に機能しないのかわかりません!
/usr/share/applications/*.desktop
からファイルを解析し、HTTPServer 経由で Web ブラウザーに表示される情報を抽出しています。テンプレートに使用しています。jinja2
最初に、私はそれを言っUnicodeDecodeError
た電話で受け取りましたjinja2.Template.render()
utf-8 cannot decode character XXX at position YY [...]
appfind
そのため、 -module (*.desktop
ファイルを解析する)からのすべての値を作成し、Unicode 文字列のみを返しました。
この場所の問題はこれまでのところ解決されていますが、ある時点で、関数によって返された文字列をBaseHTTPServer.BaseHTTTPRequestHandler.wfile
スロットに書き込んでいます。使用するエンコーディングに関係なく、このエラーを修正できません。
この時点で、書かれている文字列は、おそらく、Unicode オブジェクトを返すものからwfile
来ています。jinja2.Template.render()
奇妙な部分は、私のUbuntu 12.04 LTS では動作しているが、友人のUbuntu 11.04 LTS では動作していないことです。しかし、それが理由ではないかもしれません。*.desktop
彼はさらに多くのアプリケーションを持っており、ファイルでエラーを発生させるエンコーディングを使用している可能性があります。
ただし、*.desktop
ファイルのエンコーディングを適切に確認しました。
data = dict(parser.items('Desktop Entry'))
try:
encoding = data.get('encoding', 'utf-8')
result = {
'name': data['name'].decode(encoding),
'exec': DKENTRY_EXECREPL.sub('', data['exec']).decode(encoding),
'type': data['type'].decode(encoding),
'version': float(data.get('version', 1.0)),
'encoding': encoding,
'comment': data.get('comment', '').decode(encoding) or None,
'categories': _filter_bool(data.get('categories', '').
decode(encoding).split(';')),
'mimetypes': _filter_bool(data.get('mimetype', '').
decode(encoding).split(';')),
}
# ...
このエラーを修正する方法を教えてください。私はunicode()
常に使用する必要がある SO に関する回答を読みましたが、それを実装するのは非常に面倒であり、書き込み時に問題が解決するとは思いませんwfile
か?
ありがとう、
ニクラス