আইকনভিআইজি অবৈধ ইনপুট ক্রম- কেন?


14

কোনও পাঠ্য ফাইলকে তার ASCII সমতুল্যে রূপান্তর করার চেষ্টা করার সময়, আমি ত্রুটি বার্তাটি পাই iconv: illegal input sequence at position

কমান্ড আমি ব্যবহার করি iconv -f UTF-8 -t ascii//TRANSLIT file

আপত্তিজনক চরিত্রটি হল æ

এখানে টেক্সট ফাইল উপস্থিত রয়েছে

কেন এটি অবৈধ ক্রম বলে? ইনপুট অক্ষরটি যথাযথ ইউটিএফ -8 অক্ষর (U + 00E6)।

উত্তর:


17

ফাইলটি ইউএসএফ -8 এ নয়, আইএসও -8859-1 এ এনকোড করা হয়েছে:

$ 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" কোনও বৈধ ইউটিএফ -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|আউটপুট হিসাবে পেয়েছিলাম ।
ব্যবহারকারী 13107

1
আপনি যা পেয়েছেন তাতে আপনি দেখতে পাচ্ছেন যে কেবলমাত্র শীর্ষ-বিট-সেট বাইট (একটি বাইট যার মূল্য হেক্সাডেসিমালে ≥ 80) e6। এটি কোনও বৈধ ইউটিএফ -8 অনুক্রমের সাথে সামঞ্জস্য করে না (ইউটিএফ -8 এ, নন-এএসসিআইআই অক্ষরগুলির জন্য কমপক্ষে 2 শীর্ষ-বিট-সেট বাইট প্রয়োজন)। ISO-8859-1 এ, e6 হ'ল "æ" অক্ষরের এনকোডিং, যা প্রত্যাশিত পাঠ্যের সাথে মিলে যায়; সুতরাং, এটি নিশ্চিত করে যে আইএসও -8859-1 এনকোডিং (বা অনুরূপ) এই ফাইলটির জন্য ব্যবহৃত হয়।
ভিঙ্ক 17

5

আপনার লিঙ্ক করা ফাইলটি কোনও HTML ডকুমেন্টের অভ্যন্তরে UTF-8 বলে মনে হচ্ছে

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

আপনি যদি প্রথমে এটি এইচটিএমএল-থেকে-টেক্সট রূপান্তরকারী হিসাবে চালনা করেন, যেমন

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

তারপরে আপনি যে ইউটিএফ -8 খণ্ডটি নিয়ে সমস্যায় পড়েছেন বলে মনে হচ্ছে ত্রুটি ছাড়াই লিখিতভাবে লিখিত হয়েছে

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

হয়ে

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

html2textউপযোগ আপনার সিস্টেমে ইনস্টল করা সম্ভব হবে না - আপনি খুঁজে পাব না এমন / এটি ইনস্টল করুন একটি পাইথন মডিউল সহ অন্যান্য কনভার্টার আছে।


না, ফাইলটি ইউটিএফ -8 এ এনকোড করা হয়নি, তবে আইএসও -8859-1-তে রয়েছে। BTW, fileকমান্ড হওয়া ASCII বলছেন, কিন্তু কারণে যে এটা শুধু ফাইল শুরুতে দেখায়, এবং ISO-8859-1 অক্ষর অবস্থানে 181536. দূরে প্রদর্শিত হবে,
vinc17

@ vinc17 আপনি কীভাবে খুঁজে পেলেন যে ফাইলটি ISO-8859 এ ছিল?
ব্যবহারকারী 13107

1
@ ব্যবহারকারী 13107 আপত্তিকর চরিত্রের এনকোডিংটি দেখে: এটি বাইট "e6", ইউটিএফ -8 অনুক্রম "সি 3 এ 6" নয়। ইমাকস ফাইলটি ISO-8859-1-তে রয়েছে বলেও সনাক্ত করেছে।
ভিঙ্ক 17
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.