【问题标题】:Python unicode string operation in App Engine failingApp Engine 中的 Python unicode 字符串操作失败
【发布时间】:2012-12-21 12:04:01
【问题描述】:

在开发/本地机器上运行的 Python 代码,但在安装到 Appengine 后失败:

我的文件中的第一行:

# -*- coding: utf8 -*-O

代码后面的行:

s1 = u'Ismerőseid'
logging.info (s1)
s2 = s1 + u':' + s1
logging.info (s2)
logging.info ("%s,%s", s1, s2)

在开发(本地主机)中:

INFO     2012-12-18 04:01:17,926 AppRun.py:662] Ismerőseid,
INFO     2012-12-18 04:01:17,926 AppRun.py:664] Ismerőseid:Ismerőseid
INFO     2012-12-18 04:01:17,926 AppRun.py:665] Ismerőseid,Ismerőseid. Ó,

安装/运行后在 App Engine 上:

I 2012-12-21 06:52:07.730 
É, Á, Ö, Ü. Ó,

E 2012-12-21 06:52:07.736

Traceback (most recent call last):
  File "....", line 672, in xxxx
    s3 = s1 + u':' + s1
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 5: ordinal not in range(128)

我尝试过编码/解码/等的各种组合。我还对粘贴的字符串“Ismerőseid”进行了chardet,它给了我{'confidence': 0.7402600692642154, 'encoding': 'ISO-8859-2'}

非常感谢任何帮助!

【问题讨论】:

  • s1 在 GAE 上不是 unicode;首先使用正确的编码将其解码为 un​​icode。
  • 如果您在源代码中使用非 ASCII 字符,则必须在文件的第二行指定文件的编码(参见 stackoverflow.com/questions/728891/… )。 (你的本地机器设置了它的语言环境,使其假定 UTF-8 而不是 ASCII,这就是它在那里工作的原因,但你永远不应该依赖这种行为)
  • 我的文件中有一个 # -- coding: utf8 --O。我假设该文件通过 App Engine 运行的方式与我通过 ${GOOGLE_APP_ENGINE}/dev_appserver.py 在本地机器(通过 eclipse)上运行它时的运行方式相同。无论如何感谢您的帮助!

标签: google-app-engine character-encoding python-2.7


【解决方案1】:

将这 3 行放在 Python 27 代码的顶部以使用 unicode:

#!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

# And this code will not give you any problems

s1 = 'É, Á, Ö, Ü. Ó,'
logging.info (s1)
s2 = s1 + ':' + s1
logging.info ("%s,%s", s1, s2)

永远不要使用 str()。仅当您确实需要时!

请阅读 Nick Johnson 的 this blogpost。这是在 Python 27 之前。他没有使用 from __future__ import unicode_literals ,这使得在 Python 中使用 unicode 变得如此容易。

【讨论】:

  • 我没有来自 __future...,只有编码:utf-8。让我补充一下,看看它是否有所作为。谢谢!
  • 这也没有解决。我继续收到错误。任何时候字符集超过 255(扩展 ascii)字符串操作似乎在 GAE 中都会失败。 python 操作尝试编码为 ascii 并失败。你有一个关于 GAE 的工作示例吗?
  • 什么操作?看看尼克·约翰逊的这篇文章:blog.notdot.net/2010/07/Getting-unicode-right-in-Python
  • Nick 的帖子提供了帮助。我的问题是我所有的多语言文字都存储在一个单独的自动生成的文件中。字符串没有以 'u' 为前缀,str 也是如此,并且所有字符串操作都失败了,因为它们的代码点大于 255。当您定义此类 sring 文字时,Python 或 eclipse 应该会抱怨。您的指针有助于解决问题并使我能够更好地理解 Python 如何处理 unicode 文字。谢谢!!
  • 你能对你的答案做一个简单的编辑,这样我就可以投票了!
猜你喜欢
  • 1970-01-01
  • 2014-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-07
  • 2015-07-11
  • 1970-01-01
相关资源
最近更新 更多