我有一個像「Tanım」這樣的編碼爲「Tan%u0131m」的Unicode字符串。我怎樣才能將這個編碼的字符串轉換回原始的Unicode。 顯然urllib.unquote不支持unicode。如何在python中取消引用urlencoded unicode字符串?
40
A
回答
63
%uXXXX是已經拒絕了W3C一個non-standard encoding scheme,儘管實現繼續在JavaScript土地生活的事實。
更常見的技術似乎是UTF-8對字符串進行編碼,然後使用%XX轉義結果字節。該方案是由urllib.unquote支持:
>>> urllib2.unquote("%0a")
'\n'
不幸的是,如果你真的需要支持%uXXXX,你可能會推出自己的解碼器。否則,只需簡單地使用UTF-8編碼你的unicode,然後%轉義生成的字節就可能更好。
一個更完整的例子:
>>> u"Tanım"
u'Tan\u0131m'
>>> url = urllib.quote(u"Tanım".encode('utf8'))
>>> urllib.unquote(url).decode('utf8')
u'Tan\u0131m'
9
def unquote(text):
def unicode_unquoter(match):
return unichr(int(match.group(1),16))
return re.sub(r'%u([0-9a-fA-F]{4})',unicode_unquoter,text)
6
這將做到這一點,如果你絕對有這個(我實在是與「非標」的呼聲同意):
from urllib import unquote
def unquote_u(source):
result = unquote(source)
if '%u' in result:
result = result.replace('%u','\\u').decode('unicode_escape')
return result
print unquote_u('Tan%u0131m')
> Tanım
4
上述版本中存在一個錯誤,當字符串中同時存在ascii編碼字符和unicode編碼字符時,它有時會出錯。我認爲它特別是當除了Unicode之外還有來自128個範圍的字符,比如'\ xab'。
例如。 「%5B%AB%u03E1%BB%5D」導致此錯誤。
我發現,如果你只是做了統一的人首先,這個問題就走了:
def unquote_u(source):
result = source
if '%u' in result:
result = result.replace('%u','\\u').decode('unicode_escape')
result = unquote(result)
return result
相關問題
- 1. 如何在Python中提取數據時獲取unicode字符串?
- 2. 如何在一個python字符串中使用Unicode字符
- 3. 如何在Unicode中讀取Unicode文件作爲Unicode字符串
- 4. Python:爲unicode消毒一個字符串?
- 5. Unicode字符串爲Unicode字符,Python 3
- 6. Unicode字符串在Python
- 7. unicode字符串在Python
- 8. 如何用別的python替換字符串中的unicode字符?
- 9. 無法在Python中引用unicode字符串
- 10. 拆分字符串,unicode,unicode,python中的字符串
- 11. Python中,字符串,Unicode字符
- 12. Python:如何鏈接字符串和Unicode?
- 13. 如何解碼unicode字符串的Python
- 14. python獲取unicode字符串大小
- 15. 「取消引用」/解析Python中的bash參數字符串
- 16. Python中的Unicode:如何測試針對unicode字符串
- 17. 在python中轉換unicode字符串
- 18. 如何在Python中將unicode字符串轉換爲文字字符串?
- 19. 如何在python中將字符串編寫爲unicode字節?
- 20. Android httpreponse(urlencoded字符串)獲取屬性
- 21. Python字符串爲Unicode
- 22. 如何在python中提取字符串中的字符串?
- 23. 如何在Python中提取字符串
- 24. 如何做一個字符串的urlencoded的字符串替換
- 25. 如何在Python中將unicode字符串加載到json中?
- 26. 如何獲取Unicode字符串的Ruby子字符串?
- 27. python的字符串是unicode字符
- 28. 如何使用JavaScript在JSON字符串中轉義Unicode字符?
- 29. 如何在Python中解碼unicode字符串的表示形式?
- 30. 如何在Python doctests中包含unicode字符串?
「urllib2.unquote」應該是「urllib.unquote」 – jamtoday 2009-09-07 00:30:47
有趣的是一個URI是一個百分比編碼字節 - 字符串,而不是字符串。 – wberry 2011-09-20 18:13:48
@jamtoday不必要的,在Python 2.7.5 +中,您可以使用`urllib2.unquote`只是嘗試`print(dir(urllib2))` – 2014-02-21 18:49:23