पाठ फ़ाइल से गैर UTF-8 वर्ण कैसे निकालें


84

मेरे पास अरबी, अंग्रेजी, रूसी फाइलों का एक गुच्छा है जो utf-8 में एन्कोडेड हैं। पर्ल स्क्रिप्ट का उपयोग करके इन फ़ाइलों को संसाधित करने की कोशिश कर रहा है, मुझे यह त्रुटि मिलती है:

Malformed UTF-8 character (fatal)

इन फ़ाइलों की सामग्री को मैन्युअल रूप से जांचते हुए, मुझे उनमें कुछ अजीब अक्षर मिले। अब मैं फ़ाइलों से इन वर्णों को स्वचालित रूप से हटाने का एक तरीका ढूंढ रहा हूं।

इसे करने का कोई तरीका है?


2
शायद यह इस तरह से है: stackoverflow.com/questions/7656283/…
ओलाफ डायटशेक्ट

2
कृपया इस लिंक को देखें: unix.stackexchange.com/questions/6516/filtering-invalid-utf8
पूछें

4
गैर UTF-8 वर्ण क्या हैं? एक अच्छी तरह से गठित UTF-8 स्ट्रिंग में सभी वर्ण UTF-8 (वास्तव में यूनिकोड) वर्ण हैं! उनमें से कुछ यूटीएफ -8 कई लगातार बाइट्स में एन्कोडेड हैं ....
बेसिल स्टारीनेवविच

3
@BasileStarynkevitch: त्रुटि संदेश स्पष्ट रूप से बताता है कि एक विकृत UTF-8 वर्ण है। इसका मतलब है कि एक बाइट दिखाई दिया जो मान्य UTF-8 फ़ाइल के भाग के रूप में प्रकट नहीं हो सकता है। यह कठिन नहीं है; यह एक 0xC0 या 0xC1 बाइट, या 0xF5..0xFF, या बाइट्स के साथ एक अनुक्रमण समस्या हो सकती है जो अन्यथा मान्य होगी।
जोनाथन लेफ्लर 4

जवाबों:


156

यह आदेश:

iconv -f utf-8 -t utf-8 -c file.txt

आपके UTF-8 फ़ाइल को साफ़ कर देगा, सभी अमान्य वर्णों को छोड़ देगा।

-f is the source format
-t the target format
-c skips any invalid sequence

11
"iconv -f utf-8 -t utf-8 -c file.txt" एक मैक पर। 'एफ' और '8' के बीच हाइफ़न
कॉलिन

1
आसानी से आप ऐसा कर मैक पर क्लिपबोर्ड सामग्री को बदल सकते हैं pbpaste | iconv -f utf-8 -t -utf-8 -c | pbcopy:। मैंने एक अल्फ़्रेड वर्कफ़्लो भी बनाया, जिसमें लक्ष्यीकरण द्वारा सभी विशेष वर्णों को अलग करने के लिए एक वैश्विक शॉर्टकट था ascii
लेनर होयट

1
इसने एक फाइल तैयार की जो मेरे लिए पूरी तरह से खाली थी। बस सभी को यह बताना चाहते हैं कि यह संभावित विनाशकारी है और इस पर चलने से पहले उनकी फ़ाइल का बैकअप लेना है।
counterbeing

5
iconv -f utf-8 -t ascii//TRANSLITमेरी समस्या हल कर दी। यह घुंघराले उद्धरणों को सीधे उद्धरणों में परिवर्तित करता है।
कर्नल पैनिक

5
-oविभिन्न आउटपुट फ़ाइल के लिए
कोडामोक

0

आपकी विधि को बाइट द्वारा बाइट पढ़ना चाहिए और वर्णों के बाइट वार निर्माण को पूरी तरह से समझना और सराहना करना चाहिए। सबसे सरल विधि एक संपादक का उपयोग करना है जो कुछ भी पढ़ेगा, लेकिन केवल आउटपुट यूटीएफ -8 वर्ण। टेक्स्टपैड एक विकल्प है।


iconv साइबरविन में उपलब्ध नहीं है। क्या विंडोज़ / साइबरविन पर ऐसा करने का कोई तरीका है? मेरे पास एक बड़ी (100000+ लाइनें) XML फ़ाइल है जिसे अमान्य वर्णों को अलग करने की आवश्यकता है। मुझे मान्य utf-8 की परवाह नहीं है। मैंने नोटपैड ++ को यूएफ -8 में सेट किया है, लेकिन वहां से बचाने के बाद भी मुझे एक्सएमएल पार्सर में त्रुटियां मिलती हैं
एमएलजेएम

ubuntu WSL विंडोज पर यह iconv
कैट लिम Ruiz

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.