我有一个utf-8编码的字符串列表,一共有57个元素,它对应着57个中文名称(列表元素形如'%E4%B8%9C%E6%96%B9%E6%98%8E%E7%8F%A0').比如上面那个括号内的编码对应的是'东方明珠',我需要用这...
我有一个utf-8编码的字符串列表,一共有57个元素,它对应着57个中文名称(列表元素形如'%E4%B8%9C%E6%96%B9%E6%98%8E%E7%8F%A0').
比如上面那个括号内的编码对应的是'东方明珠',我需要用这个列表的元素和某txt文件里的中文字符比较,碰到'东方明珠'则返回true.
网上搜索貌似应该用urllib.unquote去分析列表元素,再和中文比较
但是我在举例探究时遇到了个诡异现象,十分不解,先上疑问,后上shell记录
希望能够得到答案,非常感谢!!
(我是Python2.7,工具是idle,以下代码是在同一个shell窗口中完成的)
疑问:
为什么第二次按gbk写入文件会导致第一次按utf-8写的中文成为乱码?
为什么第三次按utf-8写入文件又不会导致第二次的变为乱码?
为什么第三次是乱码?(因为同为utf-8,第一次write时就不是乱码,)
shell记录:
>>> import urllib
>>> a='%E4%B8%9C%E6%96%B9%E6%98%8E%E7%8F%A0' #这是'东方明珠'的utf8编码
>>> print urllib.unquote(a)
涓沧柟鏄庣彔
>>> t=open(r'test.txt','a')
>>> t.write('\n'+urllib.unquote(a))
>>> t.close()
此时可见:
>>> a='%B6%AB%B7%BD%C3%F7%D6%E9' #这是'东方明珠'gbk编码
>>> print urllib.unquote(a)
东方明珠
>>> t=open(r'test.txt','a')
>>> t.write('\n'+urllib.unquote(a))
>>> t.close()
此时可见:
>>> a='%E4%B8%9C%E6%96%B9%E6%98%8E%E7%8F%A0' #回到'东方明珠'utf-8
>>> print urllib.unquote(a)
涓沧柟鏄庣彔
>>> t=open(r'test.txt','a')
>>> t.write('\n'+urllib.unquote(a))
>>> t.close()
此时可见:
追问字符限制,我再这里补充哈= =
比如一个普通的txt文档,我捕捉到了'东方明珠',把赋值给a[0],
然后再和我那个utf-8列表元素比较
若b[1]对应的就是'东方明珠'
如何让a[0],b[1]比较后返回true呢= =
展开