2011-06-14 15 views
3

你好,我想知道如果你知道任何其他方式編碼字符串的URL安全,因爲urllib.quote做錯了,輸出是不同於預期:如何使用python進行網址安全編碼的字符串?和urllib.quote是錯誤的

如果我嘗試

urllib.quote( 'A')

我得到

'%C3%A1'

但是那不是正確的輸出,它應該是 %E1

正如實例闡述由這裏提供this site

的工具,這是不是我難以,報價的錯誤輸出是阻止瀏覽器找到資源,如果我嘗試

urllib.quote( '\圖像\ A \一些file.jpg')

然後我嘗試使用JavaScript工具,我提到我分別

%5Cimages得到這個字符串%5C%C3%A1%5Csome%20file.jpg

%5Cimages%5C%E1%5Csome%20file.jpg

注意如何幾乎是相同的,但通過引用提供的URL不起作用另一個是它。 我試圖提供給報價字符串編碼(「UTF-8)搞亂,但它不會有所作爲。 我試着用其他的口音西班牙語單詞和他們都不同代表的ñ。

這是一個Python的錯誤嗎? 你知道一些模塊,得到這個權利?

+3

JavaScript和Python的使用相同的編碼?你有沒有試過unicode? 'repr('á')==''\\ xc3 \\ xa1'「和'repr(u'á')==」u'\\ xe1'「' – JBernardo 2011-06-14 02:34:26

+0

@Rob:我很確定UTF -8應該在URL中。 – icktoofay 2011-06-14 02:36:42

+2

相關:http://stackoverflow.com/questions/912811/what-is-the-proper-way-to-url-encode-unicode-characters – icktoofay 2011-06-14 02:38:12

回答

7

RFC 3986%C3%A1是正確的。在字節流被百分比編碼之前,應該使用UTF-8將字符轉換爲八位字節流。您鏈接的網站已過時。

更多細節見Why does the encoding's of a URL and the query string part differ?上的URL中處理非ASCII字符的歷史。

+0

可能是,但我的瀏覽器都沒有找到「更新」編碼的資源。 – 2011-06-14 03:20:15

+0

那麼,任何使用過時但實際工作的編碼的模塊? – 2011-06-14 03:42:03

+2

@Guillermo,你能否更新你的_server_以允許較新的HTTP客戶端請求更新的RFC中指定的資源? – sarnold 2011-06-14 09:01:32

0

默認情況下Python是以ASCII解釋的,所以即使您的文件編碼方式不同,您的UTF-8字符也會作爲兩個ASCII字符進行交錯處理。

嘗試將代碼的第一行作爲代碼的第一行來匹配文件編碼,而且您也可能需要使用u'á'

# coding: utf-8 
+1

哦,謝謝,但沒有效果的嘗試。 – 2011-06-14 03:42:47

0

怎麼樣使用unicode字符串和字符的數字表示(ord)?

>>> print '%{0:X}'.format(ord(u'á')) 
%E1 
+0

這是一種黑客攻擊,但對於仍需要ISO-8859-1的網站可能需要進行破解。正如urllib所假設的,大多數Web服務器現在都符合UTF-8。 – krubo 2011-06-14 03:22:59

+1

作品,但看起來像黑魔法,並沒有超過1個字符的工作,並循環所有我的內容,似乎並不是一個好主意。 – 2011-06-14 03:43:35

0

In this question似乎有些傢伙寫了一個相當大的功能轉換爲ASCII的URL,這就是我所需要的。但我希望在工作的std lib中有一些編碼工具。

+0

我說得太快了,那些函數不會輸出需要的Unicode代碼點。 – 2011-06-14 04:29:22

3

好,我知道,我必須編碼爲ISO-8859-1這樣

word = u'á' 
word = word.encode('iso-8859-1') 
print word 
相關問題