Tôi biết về lược đồ% uxxxx không chuẩn nhưng đó có vẻ không phải là một lựa chọn khôn ngoan vì lược đồ đã bị W3C từ chối.
Một số ví dụ thú vị:
Nhân vật trái tim. Nếu tôi nhập cái này vào trình duyệt của mình:
http://www.google.com/search?q=♥
Sau đó sao chép và dán nó, tôi thấy URL này
http://www.google.com/search?q=%E2%99%A5
điều này làm cho có vẻ như Firefox (hoặc Safari) đang làm điều này.
urllib.quote_plus(x.encode("latin-1"))
'%E2%99%A5'
điều này có ý nghĩa, ngoại trừ những thứ không thể mã hóa bằng tiếng Latinh-1, như ký tự ba chấm.
…
Nếu tôi nhập URL
http://www.google.com/search?q=…
vào trình duyệt của tôi, sau đó sao chép và dán, tôi nhận được
http://www.google.com/search?q=%E2%80%A6
trở lại. Đó dường như là kết quả của việc làm
urllib.quote_plus(x.encode("utf-8"))
điều này có ý nghĩa vì… không thể được mã hóa bằng Latin-1.
Nhưng sau đó, tôi không rõ làm thế nào trình duyệt biết nên giải mã bằng UTF-8 hay Latin-1.
Vì điều này có vẻ không rõ ràng:
In [67]: u"…".encode('utf-8').decode('latin-1')
Out[67]: u'\xc3\xa2\xc2\x80\xc2\xa6'
hoạt động, vì vậy tôi không biết trình duyệt tìm ra cách giải mã bằng UTF-8 hay Latin-1.
Điều đúng đắn cần làm với các ký tự đặc biệt mà tôi cần xử lý là gì?