Python:"...".encode("utf8")修复了什么?

fly*_*ire 9 python unicode urlencode utf-8 internationalization

我想url编码python字符串并获得希伯来字符串的异常.我无法解决它并开始做一些猜测导向的编程.最后,mystr = mystr.encode("utf8")在将其发送到url编码器之前执行保存当天.

有人可以解释发生了什么吗?.encode("utf8")有什么作用?我的原始字符串无论如何都是unicode字符串(即以au为前缀).

det*_*tly 13

我的原始字符串无论如何都是unicode字符串(即以au为前缀)

......这是问题所在.它不是"字符串",而是"Unicode对象".它包含一系列Unicode代码点.当然,这些代码点必须具有Python所知道的一些内部表示,但无论它是什么都被抽象掉了,\uXXXX当你这些代码时它们被显示为那些实体print repr(my_u_str).

要获得另一个程序可以理解的字节序列,您需要获取Unicode代码点序列并对其进行编码.您需要决定编码,因为有很多可供选择.UTF8和UTF16是常见的选择.ASCII也可以,如果它适合.u"abc".encode('ascii')工作得很好.

不要my_u_str = u"\u2119ython"type(my_u_str)type(my_u_str.encode('utf8'))看到类型的区别:第一是<type 'unicode'>,第二个是<type 'str'>.(无论如何,在Python 2.5和2.6下).

Python 3中的情况有所不同,但由于我很少使用它,如果我试图说出任何权威的话,我就会说出来.


sth*_*sth 9

原始字符串是包含原始Unicode代码点的unicode对象,在将其编码为UTF-8之后,它是包含UTF-8编码数据的普通字节字符串.

URL编码器似乎需要一个字节字符串,因此它可以对一个接一个的字节进行URL编码,而不必处理Unicode代码点.当你给它一个unicode对象时,它会尝试使用一些默认编码将其转换为字节字符串,可能是ASCII.对于无法表示为ASCII的希伯来字符,这将导致错误.