আমি কীভাবে কোনও পাঠ্য ফাইলের এনকোডিং পরীক্ষা করতে পারি… এটি বৈধ এবং এটি কী?


46

আমার বেশ কয়েকটি .htmফাইল রয়েছে যা গেডিতে কোনও সতর্কতা / ত্রুটি ছাড়াই খোলে , কিন্তু আমি যখন এই ফাইলগুলি খুলি তখন Jeditএটি আমাকে অবৈধ ইউটিএফ -8 এনকোডিং সম্পর্কে সতর্ক করে ...

এইচটিএমএল মেটা ট্যাগে "চরসেট = আইএসও -8859-1" লেখা আছে। জেডিট ফ্যালব্যাক এনকোডিংগুলির একটি তালিকা এবং এনকোডিং অটো-ডিটেক্টরগুলির তালিকাকে (বর্তমানে "বিওএম এক্সএমএল-পিআই") অনুমতি দেয়, তাই আমার তাত্ক্ষণিক সমস্যার সমাধান হয়ে গেছে। তবে এটি আমার সম্পর্কে ভাবতে পেরেছিল: মেটা ডেটা না থাকলে কী হত?

যখন এনকোডিংয়ের তথ্য কেবল উপলভ্য নয়, তখন এমন কোনও সি এল এল প্রোগ্রাম রয়েছে যা কোনও এনকোডিংগুলি প্রয়োগ করতে পারে তার একটি "সেরা অনুমান" তৈরি করতে পারে?

এবং, যদিও এটি কিছুটা আলাদা বিষয়; এমন একটি সি এল এল প্রোগ্রাম রয়েছে যা একটি পরিচিত এনকোডিংয়ের বৈধতা পরীক্ষা করে ?


"পাঠ্য ফাইল এনকোডিংটি কীভাবে স্বয়ংক্রিয়ভাবে সনাক্ত করা যায়?" superuser.com/questions/301552/…
buzz3791

উত্তর:


60

fileকমান্ড এনকোডিং সম্পর্কে "বেস্ট অনুমান" করে তোলে। এনকোডিং সম্পর্কিত তথ্য মুদ্রণের জন্য -iপ্যারামিটারটি ব্যবহার করুন file

প্রদর্শন:

$ file -i *
umlaut-iso88591.txt: text/plain; charset=iso-8859-1
umlaut-utf16.txt:    text/plain; charset=utf-16le
umlaut-utf8.txt:     text/plain; charset=utf-8

আমি কীভাবে ফাইলগুলি তৈরি করেছি:

$ echo ä > umlaut-utf8.txt 

আজকাল সব কিছু utf-8। তবে নিজেকে বোঝান:

$ hexdump -C umlaut-utf8.txt 
00000000  c3 a4 0a                                          |...|
00000003

Https://en.wikedia.org/wiki/Ä# কম্পিউটার কম্পিউটার_ইনকোডিংয়ের সাথে তুলনা করুন

অন্যান্য এনকোডিংগুলিতে রূপান্তর করুন:

$ iconv -f utf8 -t iso88591 umlaut-utf8.txt > umlaut-iso88591.txt 
$ iconv -f utf8 -t utf16 umlaut-utf8.txt > umlaut-utf16.txt 

হেক্স ডাম্প পরীক্ষা করুন:

$ hexdump -C umlaut-iso88591.txt 
00000000  e4 0a                                             |..|
00000002
$ hexdump -C umlaut-utf16.txt 
00000000  ff fe e4 00 0a 00                                 |......|
00000006

তিনটি মিশ্রিত করে কিছু "অবৈধ" তৈরি করুন:

$ cat umlaut-iso88591.txt umlaut-utf8.txt umlaut-utf16.txt > umlaut-mixed.txt 

কি fileবলে:

$ file -i *
umlaut-iso88591.txt: text/plain; charset=iso-8859-1
umlaut-mixed.txt:    application/octet-stream; charset=binary
umlaut-utf16.txt:    text/plain; charset=utf-16le
umlaut-utf8.txt:     text/plain; charset=utf-8

ছাড়া -i:

$ file *
umlaut-iso88591.txt: ISO-8859 text
umlaut-mixed.txt:    data
umlaut-utf16.txt:    Little-endian UTF-16 Unicode text, with no line terminators
umlaut-utf8.txt:     UTF-8 Unicode text

fileকমান্ড "বৈধ" বা "অবৈধ" কোন ধারণা আছে। এটি কেবল কিছু বাইট দেখে এবং এনকোডিং কী হতে পারে তা অনুমান করার চেষ্টা করে। মানুষ হিসাবে আমরা চিনতে সক্ষম হতে পারি যে কোনও ফাইল একটি "ভুল" এনকোডিংয়ে কিছু উমলাট সহ একটি পাঠ্য ফাইল। তবে কম্পিউটার হিসাবে এটির জন্য একরকম কৃত্রিম বুদ্ধি প্রয়োজন।

কেউ তর্ক করতে পারে যে হিউরিস্টিক্স fileহ'ল একরকম কৃত্রিম বুদ্ধিমত্তা। তবুও যদি তা হয় তবে এটি খুব সীমাবদ্ধ।

fileকমান্ড সম্পর্কে আরও তথ্য এখানে : http://www.linfo.org/file_command.html


ধন্যবাদ, এটি কাজ করেছে ... আমি ফাইল , but without any option :( ... I've now also tried a mixof UTF-16 and UTF-8 and ISO-8859-1. ফাইল -i` রিপোর্ট করে চেষ্টা করেছি unknown-8bit। সুতরাং,
এটিরও

যারা এখানে আসেন এবং ম্যাক করেন তাদের জন্য এটি file -Iছোট হাতের পরিবর্তে মূলধন 'i' দিয়ে with
সামুরাইসৌল

21

কোনও পাঠ্য ফাইলের এনকোডিং কী তা নিশ্চিত করে খুঁজে পাওয়া সবসময় সম্ভব নয়। উদাহরণস্বরূপ, বাইট ক্রম \303\275( c3 bdহেক্সাডেসিমেল) হতে পারে ýহল UTF-8, বা ýlatin1, বা Ă˝latin2, বা বড় 5, ইত্যাদি।

কিছু এনকোডিংগুলিতে অবৈধ বাইট সিকোয়েন্স রয়েছে, তাই নিশ্চিতভাবে এগুলি বাতিল করা সম্ভব। এটি ইউটিএফ -8 বিশেষত সত্য; সর্বাধিক 8-বিট এনকোডিংয়ের বেশিরভাগ পাঠ্য বৈধ ইউটিএফ -8 নয়। আপনি বৈধ হল UTF-8 সঙ্গে জন্য পরীক্ষা করতে পারেন isutf8থেকে moreutils বা iconv -f utf-8 -t utf-8 >/dev/nullঅন্যান্যের মধ্যে।

এমন কিছু সরঞ্জাম রয়েছে যা একটি পাঠ্য ফাইলের এনকোডিং অনুমান করার চেষ্টা করে। তারা ভুল করতে পারে, তবে যতক্ষণ না আপনি ইচ্ছাকৃতভাবে তাদের বোকা বানানোর চেষ্টা না করেন তারা প্রায়ই অনুশীলনে কাজ করেন।

  • file
  • পার্লEncode::Guess (স্ট্যান্ডার্ড বিতরণের অংশ) বাইট স্ট্রিংয়ের উপর পরপর এনকোডিংগুলি চেষ্টা করে এবং প্রথম এনকোডিংটি দেয় যেখানে স্ট্রিংটি বৈধ পাঠ্য।
  • এনকা হ'ল একটি এনকোডিং গেসার এবং রূপান্তরকারী। আপনি এটিকে একটি ভাষার নাম এবং পাঠ্যটি দিতে পারেন যা আপনি অনুমান করছেন যে সেই ভাষাতে (সমর্থিত ভাষা বেশিরভাগ পূর্ব ইউরোপীয় ভাষা) এবং এটি এনকোডিং অনুমান করার চেষ্টা করে।

ফাইলে যদি মেটাডেটা (এইচটিএমএল / এক্সএমএল charset=, টেক্স \inputenc, ইমাসস -*-coding-*-,…) থাকে তবে ইমাসস বা ভিমের মতো উন্নত সম্পাদকরা প্রায়শই সেই মেটাডেটা পার্স করতে সক্ষম হন। যদিও কমান্ড লাইন থেকে স্বয়ংক্রিয় করা সহজ নয়।


ভাল ওভারভিউয়ের জন্য ধন্যবাদ ... হ্যাঁ, এনকোডিংটি জানা না গেলে "সেরা-অনুমান" একমাত্র বিকল্প হতে পারে ... ব্যবহার করে iconv, আমি iconv -lআমার .htm ফাইলগুলির মধ্যে একটির তালিকাভুক্ত সমস্ত 1168 এনকোডিং (এলিয়াস সহ) চালিয়েছি ... এখানে 683 টি এনকোডিং ছিল যা মাস্টার কেটে গেছে .. ফাইলটির আসল চরসেট = আইএসও -8859-1 .. সমস্ত বারের একটি এএসসিআইআই-রেঞ্জের মানগুলি নিয়ে গঠিত .. নন-এএসসিআইআই চরটি ছিল \ xA9।
পিটার.ও

0

এছাড়াও আপনি ফাইল -i আপনাকে অজানা দেয়

আপনি এই পিএইচপি কমান্ডটি ব্যবহার করতে পারেন যা নীচের মতো চরসেট অনুমান করতে পারে:

পিএইচপি তে আপনি নীচের মত চেক করতে পারেন:

এনকোডিং তালিকা স্পষ্টভাবে উল্লেখ করা:

php -r "echo 'probably : ' . mb_detect_encoding(file_get_contents('myfile.txt'), 'UTF-8, ASCII, JIS, EUC-JP, SJIS, iso-8859-1') . PHP_EOL;"

আরও সঠিক " এমবি_লিস্ট_নোকডিংস ":

php -r "echo 'probably : ' . mb_detect_encoding(file_get_contents('myfile.txt'), mb_list_encodings()) . PHP_EOL;"

এখানে প্রথম উদাহরণে আপনি দেখতে পাচ্ছেন যে আমি মেলানো হতে পারে এমন এনকোডিংগুলির একটি তালিকা রেখেছি (তালিকার ক্রম সনাক্ত করুন)। আরও সঠিক ফলাফল পেতে আপনি সমস্ত সম্ভাব্য এনকোডিংগুলি এর মাধ্যমে ব্যবহার করতে পারেন: mb_list_encodings ()

নোট এমবি_ * ফাংশনগুলির জন্য পিএইচপি-এমবিস্ট্রিং প্রয়োজন

apt-get install php-mbstring 

উত্তর দেখুন: https://stackoverflow.com/a/57010566/3382822

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.