如何对混合utf8格式使用不同的unquote语句

2024-10-05 12:21:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python2.6中有两个引用的变量(使用urllib)。你知道吗

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

使用下面的unquote格式,我得到了正确转换的第一个,而不是第二个。你知道吗

>>> 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的区别?你知道吗


Tags: my格式unicodeexception方案urllibstprint
1条回答
网友
1楼 · 发布于 2024-10-05 12:21:06

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

你必须使用try/except并抱着最好的希望。解引号后解码值:

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

引用的值不是Unicode字符串,不要试图以此威胁它们。它只是意外地在x1示例中起作用,因为前255个Unicode码点碰巧重用了拉丁-1标准。你知道吗

如果这些字符串来自一个web数据源,您应该尝试找出何时使用了什么编码。例如,看看是否有带有Content-Type参数的charset头,它可以为您提供使用什么的线索。否则,一些拉丁-1序列可能会被误认为UTF-8。你知道吗

相关问题 更多 >

    热门问题