मैं SQL * लोडर का उपयोग कर डेटा लोड करते समय एक पर्ल स्क्रिप्ट का उपयोग करके विकृत स्थान के साथ विकृत स्थान के साथ विकृत यूटीएफ -8 अक्षरों को पहचानना और प्रतिस्थापित करना चाहता हूं। मैं यह कैसे कर सकता हूँ?विकृत यूटीएफ अक्षरों का पता लगाने के लिए
उत्तर
संपादित करें: (एसक्यूएल लोडर के बारे में निकाला गया बिट के रूप में यह अब प्रासंगिक लगती है।)
एक समस्या यह है कि क्या एक विकृत UTF-8 वर्ण के "अंत" के रूप में गिना जाता है काम कर बाहर होने जा रहा है। यह कहना आसान है कि क्या अवैध है, लेकिन यह स्पष्ट नहीं हो सकता है कि अगला कानूनी चरित्र कहां से शुरू होता है।
RFC 3629 यूटीएफ -8 अक्षरों की संरचना का वर्णन करता है। यदि आप इसे देखते हैं, तो आप देखेंगे कि यह अमान्य वर्ण ढूंढने के लिए बहुत सरल है, और अगली वर्ण सीमा हमेशा ढूंढना आसान है (यह एक वर्ण < 128 है, या "लंबे चरित्र" स्टार्ट मार्करों में से एक है, 110, 1110, या 11110 के प्रमुख बिट्स के साथ)।
लेकिन बीकेबी शायद सही है - सबसे आसान जवाब यह है कि पेर्ल इसे आपके लिए करें, हालांकि मुझे यकीन नहीं है कि जब पर्ल ऐसा करता है तो उस फ़िल्टर के साथ गलत utf-8 का पता लगाता है।
पायथन पर विचार करें। यह उपयोगकर्ता द्वारा परिभाषित त्रुटि हैंडलर के साथ कोडेक्स को विस्तारित करने की अनुमति देता है, ताकि आप जो कुछ भी चाहते हैं उसके साथ अपरिवर्तनीय बाइट्स को प्रतिस्थापित कर सकें।
import codecs
codecs.register_error('spacer', lambda ex: (u' ', ex.start + 1))
s = 'spam\xb0\xc0eggs\xd0bacon'.decode('utf8', 'spacer')
print s.encode('utf8')
यह प्रिंट:
spam eggs bacon
- 1. सबस्क्रिप्ट अक्षरों के लिए यूटीएफ 8 प्रतीकों
- 2. का पता लगाने के लिए Ctrl +
- 3. गैर-असीसी अक्षरों का पता लगाने के लिए जावा स्क्रिप्ट नियमित अभिव्यक्ति
- 4. स्वाइप पता लगाने के लिए
- 5. आवाज का पता लगाने
- 6. यूटीएफ 8 अक्षरों से बचने के लिए उनके मूल रूप
- 7. क्या यूटीएफ 8 अक्षरों के लिए डिलीमीटर बाइट हैं?
- 8. PHP फाइलिंग सिस्टम एन्कोडिंग का पता लगाने
- 9. स्मृति रिसाव का पता लगाने के लिए CppUnit का उपयोग
- 10. संपत्ति प्रकार का पता लगाने के लिए PropertyInfo का उपयोग
- 11. ऑटोबॉक्सिंग का पता लगाने के लिए उपकरण का निर्माण?
- 12. file_get_contents() यूटीएफ -8 अक्षरों को तोड़ता है
- 13. ड्रैग के बाद 'फ्लिक' का पता लगाने के लिए कैसे?
- 14. स्ट्रीम के अंत का पता लगाने के लिए कैसे?
- 15. माउस समर्थन का पता लगाने
- 16. रेखा का पता लगाने | जावा
- 17. चिपमंक टकराव का पता लगाने
- 18. उपयोगकर्ता गतिविधि का पता लगाने
- 19. माउस सूचक का पता लगाने
- 20. आकृति का पता लगाने - ओपनसीवी
- 21. का पता लगाने और वाईफाई
- 22. का पता लगाने अगर रंग
- 23. UIScrollView स्थिति का पता लगाने
- 24. JComboBox संपादन का पता लगाने
- 25. घोस्टस्क्रिप्ट रंग का पता लगाने
- 26. openCV का पता लगाने रोशनी
- 27. jQuery ब्राउज़र का पता लगाने?
- 28. आईओएस क्रोम का पता लगाने
- 29. का पता लगाने और अजगर
- 30. गति का पता लगाने वीएलसीजे
ढूँढना जहां अगले वर्ण शुरू होता है आसान है - कि UTF-8 के डिजाइन के बारे में बहुत शांत चीजों में से एक है। http://tools.ietf.org/html/rfc3629 –
केवल अच्छी तरह से गठित यूटीएफ -8 में आसान है। एक डुप्लिकेट लीड-बाइट डालने की कल्पना करें - आपको पहली घटना को छोड़ना होगा। यदि आप बस यूटीएफ -8 नियमों का पालन करते हैं, तो अगला चरित्र चरित्र के आखिरी बाइट से शुरू होता प्रतीत होता है जिसका नेतृत्व बाइट डुप्लिकेट किया गया था। – MSalters
@MSalters: यही वह चीज है जिसके बारे में मैं सोच रहा था, लेकिन मुझे यकीन नहीं था कि मैं खुद के बारे में सोच रहा हूं :) –