अपने मूल उत्तर में, मैंने भी सुझाव दिया unicodedata.normalize। हालाँकि, मैंने इसका परीक्षण करने का निर्णय लिया और यह पता चला कि यह यूनिकोड उद्धरण चिह्नों के साथ काम नहीं करता है। यह यूनिकोड वर्णों के उच्चारण का अच्छा काम करता है, इसलिए मुझे लगता है कि unicodedata.normalizeयह unicode.decompositionफ़ंक्शन का उपयोग करके कार्यान्वित किया गया है, जो मुझे विश्वास दिलाता है कि यह शायद केवल यूनिकोड वर्णों को संभाल सकता है जो एक पत्र और एक विशिष्ट चिह्न के संयोजन हैं, लेकिन मैं वास्तव में नहीं हूं यूनिकोड विनिर्देश पर एक विशेषज्ञ, इसलिए मैं सिर्फ गर्म हवा से भरा हो सकता है ...
किसी भी घटना में, आप unicode.translateइसके बजाय विराम चिह्न वर्णों से निपटने के लिए उपयोग कर सकते हैं । translateविधि यूनिकोड ऑर्डिनल्स यूनिकोड ऑर्डिनल्स का एक शब्दकोश लेता है, इस प्रकार आप एक मानचित्रण कि ASCII-संगत विराम चिह्न के लिए यूनिकोड-केवल विराम चिह्न तब्दील बना सकते हैं:
'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!"'
यदि आवश्यक हो तो आप अधिक विराम चिह्न जोड़ सकते हैं, लेकिन मुझे नहीं लगता कि आपको हर एक यूनिकोड पंचर चरित्र को संभालने के बारे में चिंता करने की आवश्यकता है। यदि आप करते हैं संभाल लहजे और अन्य विशेषक के निशान की जरूरत है, तो आप अभी भी उपयोग कर सकते हैं unicodedata.normalizeउन अक्षरों से निपटने के लिए।