我在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吗?
答案 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。