Trong câu trả lời ban đầu của tôi, tôi cũng đề nghị unicodedata.normalize
. Tuy nhiên, tôi đã quyết định kiểm tra nó và hóa ra nó không hoạt động với dấu ngoặc kép Unicode. Nó hoạt động tốt trong việc dịch các ký tự Unicode có dấu, vì vậy tôi đoán unicodedata.normalize
nó được triển khai bằng cách sử dụng unicode.decomposition
hàm, điều này khiến tôi tin rằng nó có thể chỉ có thể xử lý các ký tự Unicode là sự kết hợp của một chữ cái và một dấu phụ, nhưng tôi không thực sự một chuyên gia về đặc điểm kỹ thuật Unicode, vì vậy tôi có thể cảm thấy hứng thú ...
Trong bất kỳ trường hợp nào, bạn có thể sử dụng unicode.translate
để xử lý các ký tự dấu câu. Các translate
phương pháp có một cuốn từ điển của ordinals Unicode để ordinals Unicode, do đó bạn có thể tạo ra một bản đồ mà dịch Unicode chỉ dấu chấm câu để chấm câu ASCII tương thích:
'Maps left and right single and double quotation marks'
'into ASCII single and double quotation marks'
>>> punctuation = { 0x2018:0x27, 0x2019:0x27, 0x201C:0x22, 0x201D:0x22 }
>>> teststring = u'\u201Chello, world!\u201D'
>>> teststring.translate(punctuation).encode('ascii', 'ignore')
'"hello, world!"'
Bạn có thể thêm nhiều ánh xạ dấu câu hơn nếu cần, nhưng tôi không nghĩ rằng bạn nhất thiết phải lo lắng về việc xử lý từng ký tự dấu câu Unicode. Nếu bạn làm cần phải xử lý dấu và dấu phụ khác, bạn vẫn có thể sử dụng unicodedata.normalize
để đối phó với những ký tự.