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.