Tôi có một chuỗi unicode như "Tanım" được mã hóa là "Tan% u0131m" bằng cách nào đó. Làm thế nào tôi có thể chuyển đổi chuỗi được mã hóa này trở về unicode gốc. Rõ ràng urllib.unquote không hỗ trợ unicode.Làm thế nào để unquote một chuỗi unicode urlencoded trong python?
Trả lời
% uXXXX là một non-standard encoding scheme rằng đã bị từ chối bởi các w3c, mặc dù thực tế rằng một thực hiện tiếp tục sống mãi trong đất JavaScript.
Kỹ thuật phổ biến hơn dường như là UTF-8 mã hóa chuỗi và sau đó% thoát các byte kết quả bằng% XX. Đề án này được hỗ trợ bởi urllib.unquote:
>>> urllib2.unquote("%0a")
'\n'
Thật không may, nếu bạn thực sự cần để hỗ trợ% uXXXX, bạn có thể sẽ phải cuộn giải mã của riêng bạn. Nếu không, nó có khả năng được nhiều hơn nữa thích hợp hơn để chỉ đơn giản là UTF-8 mã hóa unicode của bạn và sau đó% thoát khỏi các byte kết quả.
Một ví dụ hoàn chỉnh hơn:
>>> u"Tanım"
u'Tan\u0131m'
>>> url = urllib.quote(u"Tanım".encode('utf8'))
>>> urllib.unquote(url).decode('utf8')
u'Tan\u0131m'
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)
này sẽ làm điều đó nếu bạn hoàn toàn phải có điều này (tôi thực sự đồng ý với tiếng kêu của "phi tiêu chuẩn"):
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
Một trường hợp bệnh lý nhẹ, nhưng: unquote_u ('Tan% 25u0131m') -> u'Tan \ u0131m 'thay vì' Tan% u0131 'như mong muốn. Chỉ cần một lời nhắc nhở về lý do tại sao bạn có thể không muốn viết một bộ giải mã trừ khi bạn thực sự cần nó. –
Tôi hoàn toàn đồng ý. Đó là lý do tại sao tôi thực sự không muốn cung cấp một giải pháp thực tế. Những điều này không bao giờ đơn giản như vậy. O.P. có thể đã tuyệt vọng mặc dù, và tôi nghĩ rằng điều này bổ sung cho câu trả lời tuyệt vời của bạn. –
có một lỗi trong phiên bản ở trên, nơi nó freaks ra đôi khi có cả ascii mã hóa và unicode mã hóa ký tự trong chuỗi. Tôi nghĩ rằng nó đặc biệt khi có các ký tự từ phạm vi 128 trên như '\ xab' ngoài unicode.
ví dụ: "% 5B% AB% u03E1% BB% 5D" gây ra lỗi này.
tôi thấy nếu bạn chỉ làm những cái unicode đầu tiên, vấn đề ra đi:
def unquote_u(source):
result = source
if '%u' in result:
result = result.replace('%u','\\u').decode('unicode_escape')
result = unquote(result)
return result
\ xab không phải là ký tự mà là một byte. Trong thực tế ví dụ của bạn "chuỗi" chứa cả byte và ký tự, mà không hợp lệ như một chuỗi duy nhất trong bất kỳ ngôn ngữ tôi biết. – wberry
- 1. Làm thế nào để chuyển đổi chuỗi thoát unicode thành các ký tự unicode trong một chuỗi python
- 2. Làm thế nào để làm cho chuỗi unicode với python3
- 3. Làm thế nào để chuyển đổi một chuỗi x-www-form-urlencoded thành JSON?
- 4. Python chuỗi Unicode
- 5. Python: Tạo chuỗi Unicode
- 6. Làm thế nào để làm cho Python 2.x chuỗi Unicode không in như u'string '?
- 7. nhận byte từ chuỗi unicode trong python
- 8. Làm thế nào để sử dụng unicode bên trong một chuỗi xpath? (UnicodeEncodeError)
- 9. Trong Python, làm cách nào để chuyển đổi danh sách các chuỗi và chuỗi thành Unicode?
- 10. Làm thế nào để tách một chuỗi trong Python?
- 11. Làm thế nào để đặt một ký tự Unicode bổ sung trong một chuỗi chữ?
- 12. Làm thế nào để nối nhiều chuỗi unicode?
- 13. Biến đổi chuỗi unicode trong python
- 14. Làm thế nào để giải mã JSON thành str và không phải unicode trong Python (2.6)?
- 15. python có kích thước chuỗi unicode
- 16. chuỗi byte so với chuỗi unicode. Python
- 17. Chuyển đổi unicode ký tự Cyrillic để chuỗi trong python
- 18. Làm cách nào để giải mã unicode một dòng tại một thời điểm trong Python 2.7?
- 19. Common Lisp Double-Backquote, Unquote, Trích dẫn, Unquote trình tự?
- 20. làm thế nào để đối phó với unicode trong mako?
- 21. Làm thế nào để chuyển đổi một chuỗi UTF-8 thành Unicode?
- 22. làm thế nào để trích xuất một chuỗi unicode với Boost.Python
- 23. Làm thế nào để trích xuất một chuỗi giữa 2 chuỗi khác trong python?
- 24. Làm thế nào tôi có thể kiểm tra một chuỗi unicode Python để thấy rằng nó * thực sự * là Unicode đúng?
- 25. Các chuỗi Python trong Python được nhúng: Làm thế nào?
- 26. Làm thế nào để nén một chuỗi trong Python để lưu trữ nó trong Redis?
- 27. Làm cách nào để thoát chuỗi Unicode bằng Ruby?
- 28. Unicode chuỗi trong XML
- 29. Làm thế nào để thể hiện mã Unicode Chr trong VB.Net Chuỗi chữ?
- 30. Làm thế nào để tìm ra số/tên của ký tự unicode trong Python?
'urllib2.unquote' nên 'urllib.unquote' – jamtoday
Thú vị rằng một URI là một byte- trăm mã hóa chuỗi, thay vì chuỗi ký tự. – wberry
@jamtoday không cần thiết, trong Python 2.7.5+ bạn có thể sử dụng 'urllib2.unquote' chỉ cần thử' print (dir (urllib2)) ' –