如何对混合utf-8格式使用不同的unquote语句

时间:2014-02-10 19:14:53

标签: python unicode encoding utf-8

我在python 2.6中有两个引用变量(使用urllib)。

>>> y1
'J%C3%A9r%C3%A9my%20Toulalan'
>>> x1
'G%E9n%E9rateur'

使用以下非引号格式,我得到第一个正确转换而不是第二个。

>>> print urllib.unquote(unicode(x1))
Générateur
>>> print urllib.unquote(unicode(y1))
Jérémy Toulalan

当我使用

时,第二个可以使用
>>> print urllib.unquote(y1)
Jérémy Toulalan 

我尝试对y1使用这样的try / exception方案,但它永远不会进入异常部分

try:
      st=urllib.unquote(unicode(y)).encode("utf-8")
   except:
      st=urllib.unquote(y)
  print st

知道我做错了什么吗?或者有更好的方法来区分x1和y1吗?

1 个答案:

答案 0 :(得分:2)

您有两种不同的编码。一个使用UTF-8,另一个使用拉丁语1。

您必须使用try / except并希望获得最佳效果。在取消引用后解码值:

try:
    st = urllib.unquote(y).decode('utf8')
except UnicodeDecodeError:
    st = urllib.unquote(y).decode('latin1')

引用的值不是Unicode字符串,不要试图威胁它们。它只是偶然地在x1示例上工作,因为前255个Unicode代码点发生以重用Latin-1标准。

如果这些字符串来自一个Web数据源,您应该尝试确定何时使用哪种编码。例如,查看是否有带Content-Type参数的charset标头,可以为您提供有关正在使用的内容的线索。否则,一些Latin-1序列可能被误认为是UTF-8。