Python unicode中的%2是什么样子的
我从别人那里读到了关于unicode的部分,这一直是我头疼的问题。如果你能给出一些提示,那将非常有帮助 情况是这样的: 我有一个名为stopword.txt的stopword文件,格式如下:Python unicode中的%2是什么样子的,python,unicode,Python,Unicode,我从别人那里读到了关于unicode的部分,这一直是我头疼的问题。如果你能给出一些提示,那将非常有帮助 情况是这样的: 我有一个名为stopword.txt的stopword文件,格式如下: 1 781037 2 650706 damen 3 196100 löwe 4 146044 lego 5 138280 monster 6 136410 high
1 781037
2 650706 damen
3 196100 löwe
4 146044 lego
5 138280 monster
6 136410 high
7 100657 kost%c3%bcm #this % seems to be strange already
8 94084 schuhe
9 93680 kinder
10 87308 mit
试图读入其中的代码,看起来像:
with open('%s/%s'%('path_to_stopwords.txt'), 'r') as f:
stoplines = [line.decode('utf-8').strip() for line in f.readlines()]
这个解码(“utf-8”)对我来说似乎非常神秘。据我所知,没有额外的
规范“打开”方法以字符串形式读入文件,该字符串将自动编码为
ascii(因此,在这种情况下,如果打开的文件包含代码点在128之外的字符(如löwe),则会导致信息丢失,并使用编码ascii将其读入程序,因为这样一来,在读入程序后,将其解码为utf-8有何意义
为了验证我的想法,我试着用代码检查每一行的内容
for line in stoplines:
print line
这给了我:
%09
%21%21%21
%26
%26amp%3b
%28buch%29
%28gr.
%2b
%2bbarbie
我很困惑这些%是从哪里来的。我是否正确阅读了文件的上下文
在Python2中,当您打开一个文件并从中读取时,您会得到一个
str
实例,而不是unicode
字符串(在Python3中,您会得到一个str
,这在Python3中是unicode)
str.decode('utf-8')
允许您将str
解码为unicode
字符串(假设编码为UTF8!)
你的话似乎是:
如果文件应该是UTF8(本机支持字符,如ü
),那么使用urlencoding确实是多余的,但我的直觉是,这个文件实际上是ASCII,而不是UTF8
在UTF8中,所有ASCII字符都映射到同一个字符,所以这是可行的,尽管是错误的。在Python2中,当您打开一个文件并从中读取时,您会得到一个
str
实例,而不是unicode
字符串(在Python3中,您会得到一个str
,在Python3中是unicode)
str.decode('utf-8')
允许您将str
解码为unicode
字符串(假设编码为UTF8!)
你的话似乎是:
如果文件应该是UTF8(本机支持字符,如ü
),那么使用urlencoding确实是多余的,但我的直觉是,这个文件实际上是ASCII,而不是UTF8
在UTF8中,所有ASCII字符都映射到同一个字符,所以这是可行的,尽管是错误的。在Python2中,当您打开一个文件并从中读取时,您会得到一个
str
实例,而不是unicode
字符串(在Python3中,您会得到一个str
,在Python3中是unicode)
str.decode('utf-8')
允许您将str
解码为unicode
字符串(假设编码为UTF8!)
你的话似乎是:
如果文件应该是UTF8(本机支持字符,如ü
),那么使用urlencoding确实是多余的,但我的直觉是,这个文件实际上是ASCII,而不是UTF8
在UTF8中,所有ASCII字符都映射到同一个字符,所以这是可行的,尽管是错误的。在Python2中,当您打开一个文件并从中读取时,您会得到一个
str
实例,而不是unicode
字符串(在Python3中,您会得到一个str
,在Python3中是unicode)
str.decode('utf-8')
允许您将str
解码为unicode
字符串(假设编码为UTF8!)
你的话似乎是:
如果文件应该是UTF8(本机支持字符,如ü
),那么使用urlencoding确实是多余的,但我的直觉是,这个文件实际上是ASCII,而不是UTF8
所有ASCII字符都映射到UTF8中的同一个字符,因此,尽管这是错误的,但仍然有效。有几点:
print urllib.unquote('%c3%bc')
ü