我目前在 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
插槽,无论我使用什么编码,我都无法修复这个错误。
此时,写入的字符串wfile
来自jinja2.Template.render()
afaik,返回一个unicode对象。
奇怪的是,它可以在我的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
?
谢谢,
尼克拉斯