iconv अवैध इनपुट अनुक्रम- क्यों?


14

पाठ फ़ाइल को इसके ASCII समकक्ष में बदलने की कोशिश करते समय, मुझे त्रुटि संदेश मिलता है iconv: illegal input sequence at position।

आज्ञा मैं उपयोग है iconv -f UTF-8 -t ascii//TRANSLIT file

आपत्तिजनक चरित्र है æ।

टेक्स्ट फ़ाइल खुद यहां मौजूद है ।

इसे अवैध अनुक्रम क्यों कहते हैं? इनपुट वर्ण उचित UTF-8 वर्ण (U + 00E6) है।

जवाबों:


17

फ़ाइल ISO-8859-1 में इनकोडेड है, UTF-8 में नहीं:

$ hd 0606461.txt | grep -B1 '^0002c520'
0002c510  64 75 6d 20 66 65 72 69  65 6e 74 20 72 75 69 6e  |dum ferient ruin|
0002c520  e6 0d 0a 2d 2d 48 6f 72  61 63 65 2e 0d 0a 0d 0a  |...--Horace.....|

और अकेले बाइट "e6" एक वैध UTF-8 अनुक्रम नहीं है।

तो, उपयोग करें iconv -f latin1 -t ascii//TRANSLIT file।


यह कैसे पता चलेगा कि बाइट किस अपकार चरित्र के अनुरूप है? मैंने hexdump -C fileकमांड की कोशिश की और 0002b220 72 75 69 6e e6 0a 20 2d 2d 20 48 6f 72 61 63 65 |ruin.. -- Horace|आउटपुट के रूप में मिला ।
— user13107

1
आपको जो मिला है, आप देख सकते हैं कि एकमात्र शीर्ष-बिट-सेट बाइट (एक बाइट जिसका मूल्य) 80 हेक्साडेसिमल में है) ई 6 है। यह एक वैध UTF-8 अनुक्रम के अनुरूप नहीं है (UTF-8 में, गैर-ASCII वर्णों को कम से कम 2 शीर्ष-बिट-सेट बाइट्स की आवश्यकता है)। ISO-8859-1 में, e6 वर्ण "," का एन्कोडिंग है, जो अपेक्षित पाठ से मेल खाता है; इसलिए, यह पुष्टि करता है कि ISO-8859-1 एन्कोडिंग (या समान) इस फ़ाइल के लिए उपयोग किया जाता है।
— vinc17

5

आपके द्वारा लिंक की गई फ़ाइल HTML दस्तावेज़ के अंदर UTF-8 प्रतीत होती है

$ file 0606461.txt 
0606461.txt: HTML document, ASCII text, with CRLF line terminators

यदि आप इसे पहले HTML-से-पाठ कनवर्टर के माध्यम से चलाते हैं, जैसे

iconv -f UTF-8 -t ascii//TRANSLIT < <(html2text 0606461.txt)

तब UTF-8 के टुकड़े से आपको परेशानी होती है, वह बिना त्रुटि के अनूदित होता है

Si fractus illabatur orbis.
Impavidum ferient ruinæ
--Horace.

हो जाता है

Si fractus illabatur orbis.
Impavidum ferient ruinae
--Horace.

html2textउपयोगिता आपके सिस्टम पर स्थापित नहीं किया जा सकता है - अगर आप पता नहीं लगा सकते / इसे स्थापित एक अजगर मॉड्यूल सहित अन्य कन्वर्टर्स देखते हैं।


नहीं, फ़ाइल UTF-8 में एन्कोडेड नहीं है, लेकिन ISO-8859-1 में। BTW, fileकमांड ASCII का कहना है, लेकिन इसका कारण यह है कि यह सिर्फ फ़ाइल की शुरुआत में दिखता है, और ISO-8859-1 चरित्र 181536 की स्थिति में बहुत दूर दिखाई देता है।
— vinc17

@ vinc17 आपको यह कैसे पता चला कि फाइल ISO-8859 में थी?
— user13107

1
@ user13107 आपत्तिजनक चरित्र के एन्कोडिंग को देखकर: यह बाइट "e6" है, न कि UTF-8 अनुक्रम "c3 a6"। Emacs ने ISO-8859-1 में फाइल होने का भी पता लगाया।
— vinc17
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.