1

我目前正在使用一个 python 脚本(appengine),它从用户(文本)获取输入并将其存储在数据库中以便以后重新分发。

就编码而言,传入的文本是未知的,我只需要对其进行一次编码。

来自客户的示例文本:

  • This%20is%20a%20test
  • 这是一个测验

现在在python中,我认为我可以做的是对其进行解码然后对其进行编码,以便两个样本都变为:

  • This%20is%20a%20test
  • This%20is%20a%20test

我正在使用的代码如下:

#
# Dencode as UTF-8
#
pl = pl.encode('UTF-8')

#
#Unquote the string, then requote to assure encoding
#
pl = urllib.quote(urllib.unquote(pl))

来自有效负载plPOST参数的位置。

问题

问题是有时我会得到特殊的(中文、阿拉伯语)类型的字符,并且会出现以下错误。

'ascii' codec can't encode character u'\xc3' in position 0: ordinal not in range(128)
    ..snip..
    return codecs.utf_8_decode(input, errors, True)
 UnicodeEncodeError: 'ascii' codec can't encode character u'\xc3' in position 0: ordinal not in range(128)

鉴于上述问题,有人知道处理字符串的最佳解决方案吗?

谢谢。

4

1 回答 1

1

代替

pl = pl.encode('UTF-8')

pl = pl.decode('UTF-8')

因为您正在尝试将字节字符串解码为字符串。

Python 2 的一个设计问题允许您.encode通过将字节字符串(已经编码)自动解码为 ASCII(这就是为什么它显然适用于 ASCII 字符串,仅对非 ASCII 字节无效)。

于 2012-07-26T05:56:20.870 回答