यदि MySQL 4 बाइट्स या अधिक के UTF-8 कोड को हैंडल नहीं कर सकता है, तो आपको कोडपॉइंट \U00010000
पर सभी यूनिकोड वर्णों को फ़िल्टर करना होगा।; UTF-8 उस सीमा से नीचे के कोडपॉइंट को 3 बाइट्स या उससे कम में एन्कोड करता है।
आप उसके लिए रेगुलर एक्सप्रेशन का उपयोग कर सकते हैं:
>>> import re
>>> highpoints = re.compile(u'[\U00010000-\U0010ffff]')
>>> example = u'Some example text with a sleepy face: \U0001f62a'
>>> highpoints.sub(u'', example)
u'Some example text with a sleepy face: '
वैकल्पिक रूप से, आप .translate()
का उपयोग कर सकते हैं समारोह
मैपिंग टेबल के साथ जिसमें केवल None
हो मान:
>>> nohigh = { i: None for i in xrange(0x10000, 0x110000) }
>>> example.translate(nohigh)
u'Some example text with a sleepy face: '
हालाँकि, अनुवाद तालिका बनाने से बहुत सारी मेमोरी खत्म हो जाएगी और उत्पन्न होने में कुछ समय लगेगा; यह शायद आपके प्रयास के लायक नहीं है क्योंकि नियमित अभिव्यक्ति दृष्टिकोण अधिक कुशल है।
यह सब माना जाता है कि आप यूसीएस -4 संकलित पायथन का उपयोग कर रहे हैं। यदि आपका अजगर UCS-2 समर्थन के साथ संकलित किया गया था तो आप केवल '\U0000ffff'
तक के कोडपॉइंट का उपयोग कर सकते हैं रेगुलर एक्सप्रेशन में और आप पहली बार में कभी भी इस समस्या का सामना नहीं करेंगे।
मैं ध्यान देता हूं कि MySQL 5.5.3 के रूप में नए जोड़े गए utf8mb4
कोडेक
पूर्ण यूनिकोड श्रेणी का समर्थन करता है।