Python中文本的编码和解码

时间:2012-07-26 03:14:29

标签: python string urllib url-encoding

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

进来的文字是 unknown ,就编码而言,我只需要编码一次。

来自客户的示例文本:

  • 此%图20是%20A%20test
  • 这是一个测试

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

  • 此%图20是%20A%20test
  • 此%图20是%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))

pl来自 POST 参数的有效负载。

问题

问题是,有时候我会得到特殊的(中文,阿拉伯语)字符,我会收到以下错误。

'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)

有没有人知道在给定上述问题的情况下处理字符串的最佳解决方案?

感谢。

1 个答案:

答案 0 :(得分:1)

替换

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

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

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

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