Python unicode中的%2是什么样子的

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

我从别人那里读到了关于unicode的部分,这一直是我头疼的问题。如果你能给出一些提示,那将非常有帮助

情况是这样的: 我有一个名为stopword.txt的stopword文件,格式如下:

         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中的同一个字符,因此,尽管这是错误的,但仍然有效。

有几点:

  • 如果文件是UTF-8,则应将其全部作为UTF-8打开,而不是逐行打开。要么全部读取然后解码(即f.read().decode(“utf-8”)),要么使用utf-8打开它
  • 您不需要f.readlines(),您可以简单地执行“for line in f”。它的内存效率更高,时间更短
  • '%s/%s'('path_to_stopwords.txt')甚至不起作用。确保你做得正确。您可能希望使用os.path.join来加入路径
  • %编码是url编码。正如我上面的托马斯所写,您可以使用urllib.unquote
  • 有几点:

  • 如果文件是UTF-8,则应将其全部作为UTF-8打开,而不是逐行打开。要么全部读取然后解码(即f.read().decode(“utf-8”)),要么使用utf-8打开它
  • 您不需要f.readlines(),您可以简单地执行“for line in f”。它的内存效率更高,时间更短
  • '%s/%s'('path_to_stopwords.txt')甚至不起作用。确保你做得正确。您可能希望使用os.path.join来加入路径
  • %编码是url编码。正如我上面的托马斯所写,您可以使用urllib.unquote
  • 有几点:

  • 如果文件是UTF-8,则应将其全部作为UTF-8打开,而不是逐行打开。要么全部读取然后解码(即f.read().decode(“utf-8”)),要么使用utf-8打开它
  • 您不需要f.readlines(),您可以简单地执行“for line in f”。它的内存效率更高,时间更短
  • '%s/%s'('path_to_stopwords.txt')甚至不起作用。确保你做得正确。您可能希望使用os.path.join来加入路径
  • %编码是url编码。正如我上面的托马斯所写,您可以使用urllib.unquote
  • 有几点:

  • 如果文件是UTF-8,则应将其全部作为UTF-8打开,而不是逐行打开。要么全部读取然后解码(即f.read().decode(“utf-8”)),要么使用utf-8打开它
  • 您不需要f.readlines(),您可以简单地执行“for line in f”。它的内存效率更高,时间更短
  • '%s/%s'('path_to_stopwords.txt')甚至不起作用。确保你已经准备好了
    print urllib.unquote('%c3%bc')
    ü