[英]Python: what does “…”.encode(“utf8”) fix?
我想url编码python字符串并获得希伯来字符串的异常。 我无法解决它并开始做一些猜测导向的编程。 最后,在将它发送到url编码器之前做mystr = mystr.encode("utf8")
保存了一天。
有人可以解释发生了什么吗? .encode(“utf8”)有什么作用? 我的原始字符串无论如何都是unicode字符串(即以au为前缀)。
我的原始字符串无论如何都是unicode字符串(即以au为前缀)
......这是问题所在。 它不是“字符串”,而是“Unicode对象”。 它包含一系列Unicode代码点。 当然,这些代码点必须具有Python所知道的一些内部表示,但无论它是什么都被抽象出来,当你print repr(my_u_str)
时它们被显示为\\uXXXX
实体。
要获得另一个程序可以理解的字节序列,您需要获取Unicode代码点序列并对其进行编码。 您需要决定编码,因为有很多可供选择。 UTF8和UTF16是常见的选择。 ASCII也可以,如果它适合。 u"abc".encode('ascii')
工作得很好。
做my_u_str = u"\ℙython"
,然后type(my_u_str)
并type(my_u_str.encode('utf8'))
以查看类型的差异:第一个是<type 'unicode'>
type(my_u_str.encode('utf8'))
<type 'unicode'>
,第二个是<type 'str'>
。 (无论如何,在Python 2.5和2.6下)。
Python 3中的情况有所不同,但由于我很少使用它,如果我试图说出任何权威的话,我就会说出来。
.encode(“utf8”)有什么作用?
这取决于您使用的Python版本:
str
对象(以UTF-16或UTF-32编码)转换为包含字符串的UTF-8表示的bytes
对象。 unicode
对象转换为以UTF-8编码的str
对象。 但str
也有encode
方法,写'...'.encode('UTF-8')
相当于写'...'.decode('ascii').encode('UTF-8')
。 由于您提到了“u”前缀,因此必须使用2.x. 如果您不需要任何2.x-only库,我建议切换到3.x,它在文本和二进制数据之间有明显的区别。
深入研究Python 3可以很好地解释这个问题。
有人可以解释发生了什么吗?
如果您告诉我们错误消息是什么会有所帮助。
urllib.quote
函数需要一个str
对象。 它也适用于仅包含ASCII字符的unicode
对象,但在包含希伯来字母时则不行。
在Python 3.x中, urllib.parse.quote
接受str
(= Python 2.x unicode
)和bytes
对象。 字符串以UTF-8自动编码。
“...”。encode(“utf-8”)将字符串的内存中表示转换为UTF-8编码的字符串。
url编码器可能期望一个字节串,即字符串表示,其中每个字符用单个字节表示。
它返回Unicode字符串的UTF-8编码版本mystr。 重要的是要意识到UTF-8只是编码Unicode的一种方式。 Python可以与许多其他编码一起使用(例如,mystr.encode(“utf32”)或甚至mystr.encode(“ascii”))。
balpha发布的链接解释了这一切。 简而言之:
你的字符串以“u”为前缀这一事实意味着它由Unicode 字符 (或代码点)组成。 UTF-8是将此字符串编码为字节序列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.