Python Unicode UnicodeEncodeError

时间:2009-07-03 02:33:05

标签: python google-app-engine unicode utf-8

我在尝试将UTF-8字符串转换为unicode时遇到问题。我收到了错误。

UnicodeEncodeError: 'ascii' codec can't encode characters in position 73-75: ordinal not in range(128)

我尝试将其封装在try / except块中,但谷歌却给了我系统管理员错误,这是一行。 有人可以建议如何捕获此错误并继续。

干杯,约翰。

- 完全错误 -

Traceback (most recent call last):
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/__init__.py", line 501, in __call__
    handler.get(*groups)
  File "/Users/johnb/Sites/hurl/hurl.py", line 153, in get
    self.redirect(url.long_url)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/__init__.py", line 371, in redirect
    self.response.headers['Location'] = str(absolute_url)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 73-75: ordinal not in range(128)

4 个答案:

答案 0 :(得分:8)

正确的solution是执行以下操作:

self.response.headers['Location'] = urllib.quote(absolute_url.encode("utf-8"))

答案 1 :(得分:4)

您尝试设置的位置标头需要是Url,并且Url需要位于Ascii中。由于您的Url不是Ascii字符串,因此您会收到错误消息。只是捕获错误无济于事,因为Location标头无法使用无效的Url。

创建absolute_url时,您需要确保其编码正确,最好使用urllib.quote和字符串encode()方法。你可以试试这个:

self.response.headers['Location'] = urllib.quote(absolute_url.encode('utf-8'))

答案 2 :(得分:1)

请编辑这个混乱,以便它清晰可辨。提示:使用“代码块”(101010 thingy button)。

你说你正在“尝试将UTF-8字符串转换为unicode”,但str(absolute_url)是一种奇怪的方式。你确定absolute_url是UTF-8吗?试试

print type(absolute_url)
print repr(absolute_url)

如果 是UTF-8,则需要absolute_url.decode('utf8')

答案 3 :(得分:-1)

试试这个:

self.response.headers['Location'] = absolute_url.decode("utf-8")
or
self.response.headers['Location'] = unicode(absolute_url, "utf-8")