ฉันรู้จักโครงการ% uxxxx ที่ไม่ได้มาตรฐาน แต่ดูเหมือนจะไม่ใช่ทางเลือกที่ชาญฉลาดเนื่องจากโครงการนี้ถูกปฏิเสธโดย W3C
ตัวอย่างที่น่าสนใจ:
ตัวละครหัวใจ หากฉันพิมพ์สิ่งนี้ลงในเบราว์เซอร์ของฉัน:
http://www.google.com/search?q=♥
จากนั้นคัดลอกและวางฉันเห็น URL นี้
http://www.google.com/search?q=%E2%99%A5
ซึ่งทำให้ดูเหมือนว่า Firefox (หรือ Safari) กำลังทำสิ่งนี้
urllib.quote_plus(x.encode("latin-1"))
'%E2%99%A5'
ซึ่งสมเหตุสมผลยกเว้นสิ่งที่ไม่สามารถเข้ารหัสเป็นภาษาลาติน -1 ได้เช่นอักขระจุดสามจุด
…
ถ้าฉันพิมพ์ URL
http://www.google.com/search?q=…
ลงในเบราว์เซอร์ของฉันจากนั้นคัดลอกและวางฉันจะได้รับ
http://www.google.com/search?q=%E2%80%A6
กลับ. ซึ่งน่าจะเป็นผลจากการทำ
urllib.quote_plus(x.encode("utf-8"))
ซึ่งสมเหตุสมผลเนื่องจาก…ไม่สามารถเข้ารหัสด้วย Latin-1
แต่มันก็ไม่ชัดเจนสำหรับฉันว่าเบราว์เซอร์รู้ได้อย่างไรว่าจะถอดรหัสด้วย UTF-8 หรือ Latin-1
เนื่องจากสิ่งนี้ดูเหมือนจะคลุมเครือ:
In [67]: u"…".encode('utf-8').decode('latin-1')
Out[67]: u'\xc3\xa2\xc2\x80\xc2\xa6'
ใช้งานได้ดังนั้นฉันไม่รู้ว่าเบราว์เซอร์คิดอย่างไรว่าจะถอดรหัสด้วย UTF-8 หรือ Latin-1
อะไรคือสิ่งที่ถูกต้องในการทำกับตัวละครพิเศษที่ฉันต้องจัดการ?