[英]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.