বিওএম ছাড়াই ইউটিএফ -8 এবং ইউটিএফ -8 এর মধ্যে আলাদা কী ? কোনটা ভাল?
বিওএম ছাড়াই ইউটিএফ -8 এবং ইউটিএফ -8 এর মধ্যে আলাদা কী ? কোনটা ভাল?
উত্তর:
ইউটিএফ -8 বিওএম একটি পাঠ্য স্ট্রিমের শুরুতে বাইটের অনুক্রম ( 0xEF, 0xBB, 0xBF
) যা পাঠককে আরও নির্ভরযোগ্যভাবে অনুমান করতে পারে যে কোনও ফাইল ইউটিএফ -8 এ এনকোডড রয়েছে।
সাধারণত, BOM সংকেত ব্যবহার করা হয় endianness একটি এনকোডিং, কিন্তু যেহেতু endianness UTF-8- অপ্রাসঙ্গিক, BOM অপ্রয়োজনীয়।
মতে ইউনিকোড মান , হল UTF-8 ফাইল জন্য BOM বাঞ্ছনীয় নয় :
2.6 এনকোডিং স্কিম
... ইউটিএফ -8 এর জন্য কোনও বিওএমের ব্যবহারের প্রয়োজন হয় না বা সুপারিশ করা হয় না, তবে এমন প্রসঙ্গে দেখা যেতে পারে যেখানে ইউটিএফ -8 ডেটা অন্য এনকোডিং ফর্মগুলি থেকে বিওএম ব্যবহার করে বা যেখানে বিএমটি ইউটিএফ -8 স্বাক্ষর হিসাবে ব্যবহৃত হয় সেখানে রূপান্তরিত হয় । আরও তথ্যের জন্য বিভাগ 16.3, বিশেষগুলিতে "বাইট অর্ডার চিহ্ন" উপধারাটি দেখুন।
অন্যান্য দুর্দান্ত উত্তর ইতিমধ্যে উত্তর দিয়েছে:
EF BB BF
তবে এটির অতিরিক্ত তথ্য হিসাবে, ইউটিএফ -8 এর জন্য বিওএমটি "গন্ধ" পাওয়ার ভাল উপায় হতে পারে যদি ইউটিএফ -8 এ কোনও স্ট্রিং এনকোড করা থাকে ... বা এটি অন্য কোনও এনকোডিংয়ে বৈধ স্ট্রিং হতে পারে ...
উদাহরণস্বরূপ, ডেটা [EF BB BF 41 42 43] হয় হতে পারে:
প্রথম বাইটগুলি দেখে ফাইলের সামগ্রীর এনকোডিংটি স্বীকৃতি দেওয়া যদি শীতল হতে পারে তবে উপরের উদাহরণের দ্বারা দেখানো হিসাবে আপনি এটির উপর নির্ভর করবেন না
এনকোডিংগুলি জানা উচিত, ভাগ্য নয়।
ইউটিএফ -8 এনকোডযুক্ত ফাইলগুলিতে বিওএম স্থাপন করার ক্ষেত্রে কমপক্ষে তিনটি সমস্যা রয়েছে।
এবং, অন্যরা যেমন বলেছে, কোনও কিছু ইউটিএফ -8 সনাক্ত করার জন্য কোনও বিওএম থাকাও যথেষ্ট নয় বা প্রয়োজনীয়ও নয়:
cat
আপনাকে একটি পরিষ্কার ফলাফল দেবে না , এর ফলস্বরূপ কেবল শুরুতে বিওএম রয়েছে। যদি আপনি এর অর্থ বোঝাতে থাকেন, তবে এটি কারণ cat
বাইট স্তরে কাজ করে, ব্যাখ্যা করা বিষয়বস্তু স্তরে নয়, এবং অনুরূপ ফ্যাশনে cat
ফটোগ্রাফগুলি নিয়ে কাজ করতে পারে না, বলুন। তবুও এটি খুব বেশি ক্ষতি করে না। কারণ বিওএম একটি শূন্য প্রস্থের অবিচ্ছেদী স্থানকে এনকোড করে।
এখানে বিওএম ব্যবহারের উদাহরণ রয়েছে যা প্রকৃত সমস্যা সৃষ্টি করে এবং এখনও অনেকে এ সম্পর্কে জানেন না।
শেল স্ক্রিপ্টস, পার্ল স্ক্রিপ্টস, পাইথন স্ক্রিপ্টস, রুবি স্ক্রিপ্টস, নোড.জেএস স্ক্রিপ্ট বা অন্য কোনও এক্সিকিউটেবল যা কোনও দোভাষী দ্বারা চালিত করা দরকার - সবগুলি একটি শেবাং লাইন দিয়ে শুরু করুন যা এর মধ্যে একটির মতো দেখাচ্ছে:
#!/bin/sh
#!/usr/bin/python
#!/usr/local/bin/perl
#!/usr/bin/env node
এটি এমন সিস্টেমকে বলে যে এই জাতীয় স্ক্রিপ্টটি চালু করার সময় কোন দোভাষীকে চালানো দরকার। স্ক্রিপ্টটি ইউটিএফ -8 এ এনকোড করা থাকলে শুরুতে কোনও বিওএম অন্তর্ভুক্ত করার জন্য প্ররোচিত হতে পারে। তবে আসলে "#!" চরিত্রগুলি কেবল অক্ষর নয়। এগুলি আসলে একটি ম্যাজিক নম্বর যা দুটি এএসসিআইআই অক্ষরের মধ্যে তৈরি হয়ে থাকে। যদি আপনি এই অক্ষরগুলির আগে কিছু (বিওএমের মতো) রাখেন তবে ফাইলটি দেখতে অন্যরকম ম্যাজিক নম্বর রয়েছে বলে মনে হবে এবং এটি সমস্যার সৃষ্টি করতে পারে।
উইকিপিডিয়া দেখুন, নিবন্ধ: শেবাং, বিভাগ: যাদু সংখ্যা :
শেবাং অক্ষরগুলি ইউটিএফ -8 সহ বর্ধিত এএসসিআইআই এনকোডিংগুলিতে একই দুটি বাইট দ্বারা উপস্থাপিত হয়, যা বর্তমান ইউনিক্স-মতো সিস্টেমে স্ক্রিপ্ট এবং অন্যান্য পাঠ্য ফাইলগুলির জন্য সাধারণত ব্যবহৃত হয়। তবে, ইউটিএফ -8 ফাইলগুলি alচ্ছিক বাইট অর্ডার চিহ্ন (বিওএম) দিয়ে শুরু হতে পারে; যদি "এক্সিকিউটর" ফাংশনটি বিশেষত 0x23 এবং 0x21 বাইটগুলি সনাক্ত করে, তবে শেবাংয়ের আগে বিওএম (0xEF 0xBB 0xBF) উপস্থিতি স্ক্রিপ্ট দোভাষীকে মৃত্যুদন্ড কার্যকর করতে বাধা দেবে।কিছু কর্তৃপক্ষ POSIX (ইউনিক্সের মতো) স্ক্রিপ্টগুলিতে বাইট অর্ডার চিহ্ন ব্যবহার করার বিরুদ্ধে পরামর্শ দেয়, [14] এই কারণে এবং আরও বৃহত্তর আন্তঃব্যবহারযোগ্যতা এবং দার্শনিক উদ্বেগের জন্য। অতিরিক্ত হিসাবে, ইউটিএফ -8 এ বাইট অর্ডার চিহ্নের প্রয়োজন হয় না, কারণ এনকোডিংয়ের সাথে শেষের সমস্যা নেই; এটি কেবলমাত্র ইউটিএফ -8 হিসাবে এনকোডিং সনাক্ত করতে কাজ করে। [সামনে জোর দাও]
আরএফসি 7159 দেখুন , বিভাগ 8.1 :
বাস্তবায়নগুলি কোনও জেএসওএন পাঠ্যের শুরুতে বাইট অর্ডার চিহ্ন যুক্ত করতে হবে না।
কেবল এটি জেএসএনেই অবৈধ নয় , চরিত্রের এনকোডিং নির্ধারণেরও প্রয়োজন নেই কারণ কোনও জেএসওএন স্ট্রিমে অক্ষর এনকোডিং এবং এন্ডিয়েনসেস উভয়ই নির্বিঘ্নভাবে নির্ধারণ করার আরও নির্ভরযোগ্য উপায় রয়েছে (বিশদটির জন্য এই উত্তরটি দেখুন)।
এটি কেবল জেএসএন-তে অবৈধ এবং প্রয়োজনীয় নয় , এটি আরএফসি 4627-তে উপস্থাপিত পদ্ধতিটি ব্যবহার করে এনকোডিং নির্ধারণ করে এমন সমস্ত সফ্টওয়্যারই ভেঙে দেয় :
এনএসএল বাইটের জন্য প্রথম চারটি বাইট পরীক্ষা করে, জেএসএনের এনকোডিং এবং শেষের দিক নির্ধারণ:
00 00 00 xx - UTF-32BE
00 xx 00 xx - UTF-16BE
xx 00 00 00 - UTF-32LE
xx 00 xx 00 - UTF-16LE
xx xx xx xx - UTF-8
এখন, ফাইলটি বিওএম দিয়ে শুরু হলে এটি এর মতো দেখাবে:
00 00 FE FF - UTF-32BE
FE FF 00 xx - UTF-16BE
FF FE 00 00 - UTF-32LE
FF FE xx 00 - UTF-16LE
EF BB BF xx - UTF-8
মনে রাখবেন যে:
বাস্তবায়নের উপর নির্ভর করে, এগুলির সকলকে ইউটিএফ -8 হিসাবে ভুলভাবে ব্যাখ্যা করা যেতে পারে এবং তারপরে ভুল ব্যাখ্যা করা বা অবৈধ ইউটিএফ -8 হিসাবে প্রত্যাখ্যান করা বা একেবারেই স্বীকৃত নয়।
অতিরিক্ত হিসাবে, যদি আমি প্রস্তাবিত হিসাবে বৈধ JSON এর জন্য বাস্তবায়ন পরীক্ষা করি তবে এটি ইউটিএফ -8 হিসাবে প্রকৃতপক্ষে এনকোড হওয়া এমনকি এমন ইনপুটকেও প্রত্যাখ্যান করবে কারণ এটি আরএফসি অনুসারে হওয়া উচিত ASCII অক্ষর <128 দিয়ে শুরু হয় না।
জেএসএনে বিওএম প্রয়োজন হয় না, এটি অবৈধ এবং আরএফসি অনুসারে সঠিকভাবে কাজ করে এমন সফ্টওয়্যার ব্রেক করে। এটি কেবল তখন এবং এটি ব্যবহার না করার জন্য একটি নোব্রাইনার হওয়া উচিত, সর্বদা এমন লোকেরা আছেন যারা বিওএম, মন্তব্য, বিভিন্ন উদ্ধৃতি বিধি বা বিভিন্ন ডেটা ধরণের ব্যবহার করে জেএসএন ভেঙে দেওয়ার জন্য জোর দিয়ে থাকেন। অবশ্যই আপনার প্রয়োজনের সাথে বিওএম বা অন্য যে কোনও জিনিস ব্যবহার করতে পারবেন - কেবল তখনই এটি JSON বলবেন না।
জেএসএনের চেয়ে অন্যান্য ডেটা ফর্ম্যাটগুলির জন্য, এটি কীভাবে প্রকৃত দেখায় তা একবার দেখুন। যদি কেবলমাত্র এনকোডিংগুলি ইউটিএফ- * হয় এবং প্রথম অক্ষরটি অবশ্যই 128 এর চেয়ে কম ASCII অক্ষর হতে পারে তবে আপনার ডেটাটির এনকোডিং এবং শেষেরতা উভয় নির্ধারণ করতে আপনার কাছে ইতিমধ্যে প্রয়োজনীয় সমস্ত তথ্য রয়েছে। এমনকি OMচ্ছিক বৈশিষ্ট্য হিসাবে বিওএম যুক্ত করা এটিকে আরও জটিল এবং ত্রুটির প্রবণ করে তুলবে।
JSON বা স্ক্রিপ্টগুলির বাইরের ব্যবহার হিসাবে, আমি মনে করি এখানে ইতিমধ্যে খুব ভাল উত্তর রয়েছে। স্ক্রিপ্টিং এবং সিরিয়ালাইজেশন সম্পর্কে আমি আরও বিশদ তথ্য যুক্ত করতে চেয়েছিলাম, কারণ এটি বিওএম চরিত্রগুলির উদাহরণ যা সত্যিকারের সমস্যা সৃষ্টি করে।
বিওএম ছাড়া ইউটিএফ -8 এবং ইউটিএফ -8 এর মধ্যে আলাদা কী?
সংক্ষিপ্ত উত্তর: ইউটিএফ -8 এ, EF BB BF
ফাইলের শুরুতে একটি বিওএম বাইট হিসাবে এনকোড করা হয় ।
দীর্ঘ উত্তর:
মূলত, আশা করা হয়েছিল যে ইউনিকোডটি ইউটিএফ -16 / ইউসিএস -2 এ এনকোড হবে। বিওএম এই এনকোডিং ফর্মটির জন্য ডিজাইন করা হয়েছিল। আপনার যখন 2-বাইট কোড ইউনিট রয়েছে, তখন সেই দুটি বাইট কোন অর্ডারে রয়েছে তা নির্দেশ করা দরকার, এবং এটি করার জন্য একটি সাধারণ সম্মেলন হ'ল ডেটা শুরুতে U + FEFF অক্ষরটি "বাইট অর্ডার চিহ্ন" হিসাবে অন্তর্ভুক্ত করা। U + FFFE অক্ষরটি স্থায়ীভাবে অ-নিযুক্ত করা হয়েছে যাতে এর উপস্থিতিটি ভুল বাইট ক্রম সনাক্ত করতে ব্যবহার করা যায়।
প্ল্যাটফর্মের শেষের দিক বিবেচনা না করেই ইউটিএফ -8 এর একই বাইট অর্ডার রয়েছে, সুতরাং বাইট অর্ডার চিহ্নের প্রয়োজন হয় না। তবে, এটি EF BB FF
ইউটিএফ -16 থেকে ইউটিএফ -8 এ রূপান্তরিত ডেটাতে (বাইট ক্রম হিসাবে ) বা ডেটা ইউটিএফ -8 হ'ল একটি "স্বাক্ষর" হিসাবে উপস্থিত হতে পারে।
কোনটা ভাল?
ছাড়া. মার্টিন কোট উত্তর হিসাবে, ইউনিকোড স্ট্যান্ডার্ড এটি সুপারিশ করে না। এটি নন-বিওএম-সচেতন সফ্টওয়্যার নিয়ে সমস্যা সৃষ্টি করে।
কোনও ফাইল ইউটিএফ -8 কিনা তা সনাক্ত করার আরও ভাল উপায় হ'ল বৈধতা পরীক্ষা করা। ইউটিএফ -8 এর বাইট সিকোয়েন্সগুলি বৈধ কিনা তা সম্পর্কে কঠোর নিয়ম রয়েছে, সুতরাং মিথ্যা ধনাত্মক হওয়ার সম্ভাবনা নগণ্য। যদি কোনও বাইট সিকোয়েন্সটি ইউটিএফ -8 এর মতো দেখা যায় তবে এটি সম্ভবত।
sh
, perl
, g++
, এবং অন্যান্য অনেক মুক্ত ও শক্তিশালী সরঞ্জাম। জিনিস কাজ করতে চান? শুধু এমএস সংস্করণ কিনুন । এমএস তাদের \ x80- \ x95 রেঞ্জের বিপর্যয়ের মতো প্ল্যাটফর্ম-নির্দিষ্ট সমস্যা তৈরি করেছে।
বিওএম সহ ইউটিএফ -8 আরও ভালভাবে চিহ্নিত করা হয়েছে। আমি কঠিন উপায়ে এই সিদ্ধান্তে পৌঁছেছি। আমি এমন একটি প্রকল্পে কাজ করছি যেখানে ফলাফলগুলির মধ্যে একটি হ'ল ইউনিকোড অক্ষর সহ সিএসভি ফাইল।
যদি সিএসভি ফাইলটি কোনও বিওএম ছাড়াই সংরক্ষণ করা হয় তবে এক্সেল মনে করে এটি এএনএসআই এবং জিব্রিশ দেখাচ্ছে। একবার আপনি সামনে "EF বিবি বিএফ" যুক্ত করুন (উদাহরণস্বরূপ, এটি ইউটিএফ -8 এর সাথে নোটপ্যাড ব্যবহার করে পুনরায় সংরক্ষণের মাধ্যমে; বা বিওএম সহ ইউটিএফ -8 দিয়ে নোটপ্যাড ++ দিয়ে) এক্সেলটি এটি সূক্ষ্মভাবে খোলে।
ইউনিকোড পাঠ্য ফাইলগুলিতে বিওএম চরিত্রটি প্রস্তুত করার জন্য আরএফসি 3629 দ্বারা সুপারিশ করা হয়েছে: "ইউটিএফ -8, আইএসও 10646 এর রূপান্তর বিন্যাস", নভেম্বর 2003 এ http://tools.ietf.org/html/rfc3629 (এই শেষ তথ্যটি এখানে পাওয়া গেছে: http://www.herongyang.com/Unicode/Notepad-Byte-Order-Mark-BOM-FEFF-EFBBBF.html )
বিওএম কোথাও কোথাও কোথাও কোথাও কোথাও কোথাও বাজে (কোন পাং উদ্দেশ্যে (sic) নয়) to এবং যখন এটি উত্সাহিত হয় (উদাহরণস্বরূপ, ব্রাউজারগুলি, সম্পাদকগুলি ইত্যাদি দ্বারা স্বীকৃত হয় না), এটি 
নথির শুরুতে অদ্ভুত অক্ষর হিসাবে প্রদর্শিত হয় (উদাহরণস্বরূপ, এইচটিএমএল ফাইল, জেএসএন প্রতিক্রিয়া, আরএসএস , ইত্যাদি) এবং টুইটারে ওবামার আলাপ চলাকালীন সাম্প্রতিক এনকোডিং ইস্যুর মতো ধরণের বিব্রতকর কারণ ঘটায় ।
এটি খুব বিরক্তিকর হয় যখন এটি ডিবাগ করা শক্ত জায়গায় বা পরীক্ষার অবহেলা করা হয় shows সুতরাং আপনি এটি ব্যবহার না করা অবধি এটি এড়ানো ভাল।
প্রশ্ন: বিওএম ছাড়াই ইউটিএফ -8 এবং ইউটিএফ -8 এর মধ্যে আলাদা কী? কোনটা ভাল?
বাইট অর্ডার চিহ্ন (বিওএম) এর উইকিপিডিয়া নিবন্ধের কিছু অংশ এখানে দেওয়া হয়েছে যা আমি বিশ্বাস করি যে এই প্রশ্নের একটি দৃ answer় উত্তর দেবে।
বিওএম এবং ইউটিএফ -8 এর অর্থ:
ইউনিকোড স্ট্যান্ডার্ড অনুমতি দেয় BOM মধ্যে হল UTF-8 , কিন্তু প্রয়োজন হয় বা তার ব্যবহার সুপারিশ করে না। ইউটিএফ -8 এ বাইট অর্ডারটির কোনও অর্থ নেই, সুতরাং ইউটিএফ -8 এ এর একমাত্র ব্যবহার শুরুতে সংকেত দেওয়া যে পাঠ্য স্ট্রিমটি ইউটিএফ -8 এ এনকোড করা আছে।
কোনও বিওএম ব্যবহার না করার পক্ষে যুক্তি :
কোনও বিওএম ব্যবহার না করার প্রাথমিক অনুপ্রেরণা হ'ল ইউনিকোড-সচেতন নয় এমন সফ্টওয়্যারটির সাথে পিছনে-সামঞ্জস্যতা ... কোনও বিওএম ব্যবহার না করার জন্য আরেকটি অনুপ্রেরণা ইউটিএফ -8 কে "ডিফল্ট" এনকোডিং হিসাবে উত্সাহিত করা।
একটি বিওএম ব্যবহারের জন্য যুক্তি :
কোনও বিওএম ব্যবহারের পক্ষে যুক্তি হ'ল এটি ব্যতীত কোনও ফাইল এনকোডিং করে কোন অক্ষর ব্যবহার করছে তা নির্ধারণের জন্য হিউরিস্টিক বিশ্লেষণের প্রয়োজন। 8তিহাসিকভাবে এই জাতীয় বিশ্লেষণ, বিভিন্ন 8-বিট এনকোডিংগুলিকে আলাদা করার জন্য জটিল, ত্রুটি-প্রবণ এবং কখনও কখনও ধীর হয়। মজিলা ইউনিভার্সাল চরসেট ডিটেক্টর এবং ইউনিকোডের আন্তর্জাতিক উপাদানগুলির মতো কাজটি সহজ করার জন্য বেশ কয়েকটি গ্রন্থাগার পাওয়া যায়।
প্রোগ্রামাররা ভুল করে ধরে ধরেছে যে ইউটিএফ -8 সনাক্তকরণটিও সমানভাবে কঠিন (এটি নয় কারণ বৃহত সংখ্যা বাইট সিকোয়েন্সগুলি অবৈধ ইউটিএফ -8, যখন এনকোডিংগুলি এই লাইব্রেরিগুলি পৃথক করার চেষ্টা করছে সমস্ত সম্ভাব্য বাইট সিকোয়েন্সগুলি অনুমতি দেয়)। সুতরাং সমস্ত ইউনিকোড-সচেতন প্রোগ্রামগুলি এই জাতীয় বিশ্লেষণ করে না এবং পরিবর্তে বিওএম-র উপর নির্ভর করে।
বিশেষত, মাইক্রোসফ্ট সংকলক এবং দোভাষী এবং নোটপ্যাডের মতো মাইক্রোসফ্ট উইন্ডোজের অনেকগুলি সফ্টওয়্যার ইউটিএফ -8 পাঠ্যটি সঠিকভাবে পড়বে না যদি না এটির কেবল মাত্র এসসিআইআই অক্ষর থাকে বা এটি বিওএম দিয়ে শুরু না করে, এবং সংরক্ষণের সময় একটি বিওএম যুক্ত করবে UTF-8 হিসাবে পাঠ্য। মাইক্রোসফ্ট ওয়ার্ড নথিটি সরল পাঠ্য ফাইল হিসাবে ডাউনলোড করা হলে গুগল ডক্স একটি বিওএম যুক্ত করবে।
যার উপর আরও ভাল, বিএম ছাড়াই বা ছাড়াই :
IETF সুপারিশ করে যে হল UTF-8, অথবা (খ) ইঙ্গিত কি এনকোডিং ব্যবহৃত হচ্ছে পরিবর্তে অন্য কোন ভাবে, তাহলে এটি হয়েছে থাকে একটি প্রোটোকল পারেন (ক) সবসময় ব্যবহার করে "উচিত স্বাক্ষর হিসাবে U + এ FEFF ব্যবহার নিষেধ।"
আমার উপসংহার:
BOM ব্যবহার করুন শুধুমাত্র যদি একটি সফটওয়্যার অ্যাপ্লিকেশান সাথে সামঞ্জস্যের একেবারে অপরিহার্য।
আরও উল্লেখ করুন যে রেফারেন্সযুক্ত উইকিপিডিয়া নিবন্ধটি ইঙ্গিত দেয় যে অনেকগুলি মাইক্রোসফ্ট অ্যাপ্লিকেশনগুলি ইউটিএফ -8 সঠিকভাবে সনাক্ত করতে BOM এর উপর নির্ভর করে, সমস্ত মাইক্রোসফ্ট অ্যাপ্লিকেশনগুলির ক্ষেত্রে এটি নয় not উদাহরণস্বরূপ, দ্বারা সরু আউট হিসাবে @barlop যখন উইন্ডোজ কমান্ড প্রম্পট ব্যবহার হল UTF-8 দিয়ে † , এই ধরনের কমান্ড type
এবং more
আশা করবেন do Bom উপস্থিত হতে। তাহলে BOM হয় বর্তমান, এটা সমস্যা হতে পারে যেমন অন্যান্য অ্যাপ্লিকেশনের জন্য।
† chcp
কমান্ডটি ইউটিএফ -8 ( বিওএম ছাড়াই ) কোড পৃষ্ঠা 65001 এর মাধ্যমে সমর্থন সরবরাহ করে ।
এই প্রশ্নের ইতিমধ্যে একটি মিলিয়ন-ও-উত্তর উত্তর রয়েছে এবং সেগুলির অনেকগুলি বেশ ভাল, তবে আমি কখন বিএমও ব্যবহার করা উচিত বা কখন ব্যবহার করা উচিত নয় তা চেষ্টা করে পরিষ্কার করতে চেয়েছিলাম।
উল্লিখিত হিসাবে, একটি স্ট্রিংটি ইউটিএফ -8 কিনা তা নির্ধারণে ইউটিএফ বিওএম (বাইট অর্ডার মার্ক) এর যে কোনও ব্যবহার শিক্ষিত অনুমানযোগ্য। যদি যথাযথ মেটাডেটা উপলভ্য থাকে (যেমন charset="utf-8"
), তবে আপনি কী ব্যবহার করবেন বলে মনে করছেন তা ইতিমধ্যে আপনি জানেন তবে অন্যথায় আপনাকে পরীক্ষা করে কিছু অনুমান করা দরকার। এর মধ্যে ফাইলটি স্ট্রিংটি হেক্সাডেসিমাল বাইট কোড, ইএফ বিবি বিএফ দিয়ে শুরু হয় কিনা তা জড়িত।
যদি ইউটিএফ -8 বিওএম-এর সাথে সম্পর্কিত কোনও বাইট কোড পাওয়া যায়, তবে এটি ইউটিএফ -8 ধরে নেওয়ার সম্ভাবনা যথেষ্ট বেশি এবং আপনি সেখান থেকে যেতে পারেন। এই অনুমান করতে বাধ্য করা হলে, পড়ার সময় অতিরিক্ত ত্রুটি যাচাই করা এখনও কিছু ঠিকঠাক আসার ক্ষেত্রে ভাল ধারণা হতে পারে। আপনার কেবলমাত্র ধরে নেওয়া উচিত যে কোনও বিওএম ইউটিএফ -8 (যেমন লাতিন -১ বা এএনএসআই) নয় তবে যদি ইনপুটটি অবশ্যই উত্সের ভিত্তিতে ইউটিএফ -8 না হয়। যদি কোনও বিওএম না থাকে তবে, আপনি কেবল এনকোডিংয়ের বিরুদ্ধে বৈধতা দিয়ে ইউটিএফ -8 হওয়ার কথা কিনা তা নির্ধারণ করতে পারেন।
আপনি যদি অন্য কোনও উপায়ে মেটাডেটা রেকর্ড করতে অক্ষম হন (একটি চরসেট ট্যাগ বা ফাইল সিস্টেম মেটার মাধ্যমে), এবং প্রোগ্রামগুলি বিওএম এর মতো ব্যবহৃত হচ্ছে, আপনার একটি বিওএম দিয়ে এনকোড করা উচিত। এটি উইন্ডোজে বিশেষত সত্য যেখানে বিওএম ব্যতীত যে কোনও কিছু সাধারণত একটি লিগ্যাসি কোড পৃষ্ঠা ব্যবহার করা হয় বলে ধরে নেওয়া হয়। বিওএম অফিসের মতো প্রোগ্রামগুলিকে বলে যে হ্যাঁ, এই ফাইলটির পাঠ্যটি ইউনিকোড; এখানে ব্যবহৃত এনকোডিং।
এটি যখন নেমে আসে তখন কেবলমাত্র আমার কেবলমাত্র ফাইলগুলির মধ্যেই সিএসভি হয়। প্রোগ্রামের উপর নির্ভর করে এটির একটি অবশ্যই BOM থাকা উচিত। উদাহরণস্বরূপ, আপনি যদি উইন্ডোজে এক্সেল 2007+ ব্যবহার করেন তবে আপনি যদি এটি সহজেই খুলতে চান এবং ডেটা আমদানি করতে না চান তবে এটি অবশ্যই একটি বিওএমের সাথে এনকোড করা উচিত।
এটি লক্ষ্য করা উচিত যে কিছু ফাইলের জন্য আপনার উইন্ডোজ এমনকি বিওএম থাকা উচিত নয় । উদাহরণগুলি SQL*plus
বা VBScript
ফাইল। যদি এই ধরনের ফাইলগুলিতে একটি বিওএম থাকে তবে আপনি সেগুলি কার্যকর করার চেষ্টা করার সময় আপনি একটি ত্রুটি পান।
বিওএম সহ ইউটিএফ -8 কেবলমাত্র তখনই সহায়তা করে যদি ফাইলে আসলে কিছু অ-এএসসিআইআই অক্ষর থাকে। যদি এটি অন্তর্ভুক্ত থাকে এবং এর মধ্যে কিছু না থাকে তবে সম্ভবত এটি পুরানো অ্যাপ্লিকেশনগুলি ভেঙে ফেলবে যা অন্যথায় ফাইলটিকে সরল ASCII হিসাবে ব্যাখ্যা করবে। এই অ্যাপ্লিকেশনগুলি স্পষ্টতই ব্যর্থ হয়ে যাবে যখন এগুলি ASCII ব্যতীত কোনও অক্ষর জুড়ে আসে, সুতরাং আমার মতে BOM কেবল তখনই যুক্ত করা উচিত যখন ফাইলটি করতে পারে, এবং আর প্লেইন ASCII হিসাবে ব্যাখ্যা করা উচিত নয়।
আমি এটা পরিষ্কার করতে চাই যে আমি বিওএম মোটেও পছন্দ না করাই পছন্দ করি। এটি ছাড়া যদি কোনও পুরানো আবর্জনা ভাঙা যায় এবং সেই উত্তরাধিকার অ্যাপ্লিকেশনটি প্রতিস্থাপন করা সম্ভব না হয় তবে এতে যুক্ত করুন।
ইউটিএফ -8 এর জন্য কোনও বিওএম আশা করবেন না।
বিওএম-তে উইকিপিডিয়া পৃষ্ঠার নীচে উদ্ধৃত: http://en.wikedia.org/wiki/Byte-order_mark#cite_note-2
"ইউটিএফ -8 এর জন্য কোনও বিওএমের ব্যবহারের প্রয়োজন হয় না বা সুপারিশ করা হয় না, তবে ইউটিএফ -8 ডেটা কোনও এনওডিং ফর্ম থেকে রূপান্তরিত হয় যেখানে বিওএম ব্যবহার করে বা যেখানে বিএমটি ইউটিএফ -8 স্বাক্ষর হিসাবে ব্যবহৃত হয়"
বিএমএম ছাড়াই ইউটিএফ -8 এর কোনও বিওএম নেই, যা ফাইলের গ্রাহককে ফাইলটি ইউটিএফ -৮-এনকোডড রয়েছে কিনা তা জানতে (বা জেনে সুবিধা হবে) ব্যতীত, বিওএমের সাথে এটি ইউটিএফ -8 এর চেয়ে ভাল আর কোনও করে তোলে না except অথবা না.
বিএমটি সাধারণত এনকোডিংয়ের অন্তর্নিহিতা নির্ধারণ করতে কার্যকর, যা বেশিরভাগ ব্যবহারের ক্ষেত্রে প্রয়োজন হয় না।
এছাড়াও, বিওএম সেই গ্রাহকদের জন্য অপ্রয়োজনীয় গোলমাল / বেদনা হতে পারে যা এটি সম্পর্কে জানেন না বা তাদের যত্ন নেই এবং ব্যবহারকারীর বিভ্রান্তির কারণ হতে পারে।
আমি এটিকে অন্য দৃষ্টিকোণ থেকে দেখছি। আমি মনে করি বিওএম সহ ইউটিএফ -8 আরও ভাল কারণ এটি ফাইল সম্পর্কে আরও তথ্য সরবরাহ করে। আমি বিএমএম ছাড়াই ইউটিএফ -8 ব্যবহার করি কেবল যদি আমার সমস্যার মুখোমুখি হয়।
আমি আমার পৃষ্ঠাগুলিতে দীর্ঘকাল ধরে একাধিক ভাষা (এমনকি সিরিলিক ) ব্যবহার করছি এবং যখন ফাইলগুলি বিওএম ছাড়াই সংরক্ষণ করা হয় এবং আমি এডিটর দিয়ে সম্পাদনা করার জন্য এগুলি পুনরায় খুলি ( চেরোভিমও উল্লেখ করেছেন), কিছু অক্ষরগুলি নষ্ট হয়ে গেছে।
মনে রাখবেন যে আপনি যখন ইউটিএফ -8 এনকোডিং সহ একটি নতুন তৈরি ফাইল সংরক্ষণ করার চেষ্টা করবেন তখন উইন্ডোজটির ক্লাসিক নোটপ্যাড স্বয়ংক্রিয়ভাবে একটি বিওএম-এর সাথে ফাইলগুলি সংরক্ষণ করে।
আমি ব্যক্তিগতভাবে বিওএম ছাড়াই বিওএম এবং .html ফাইলগুলির সাথে সার্ভারের সাইড স্ক্রিপ্টিং ফাইলগুলি (.asp, .ini, .aspx) সংরক্ষণ করি ।
chcp 65001
utf8 সমর্থনের জন্য কমান্ডটি চালান , এটি বোম ছাড়াই utf8। আপনি যদি type myfile
এটি করেন তবে বোমা না থাকলে কেবল এটি সঠিকভাবে প্রদর্শিত হবে। যদি আপনি আ ফাইল ফাইল করতে অক্ষরগুলি আউটপুট করেন echo aaa>a.a
বা echo אאא>a.a
আপনার কাছে chcp 65001 থাকে তবে এটি কোনও বিওএম ছাড়াই আউটপুট দেয়।
আপনি যখন ইউটিএফ -8 এ এনকোডড তথ্য প্রদর্শন করতে চান তখন আপনি সমস্যার মুখোমুখি হতে পারেন না। উদাহরণস্বরূপ ইউটিএফ -8 হিসাবে একটি এইচটিএমএল দস্তাবেজটি ঘোষণা করুন এবং আপনার ব্রাউজারে ডকুমেন্টের শরীরে থাকা সমস্ত কিছুই থাকবে will
উইন্ডোজ বা লিনাক্সে যখন আমাদের কাছে পাঠ্য, সিএসভি এবং এক্সএমএল ফাইল থাকে তখন এটি হয় না।
উদাহরণস্বরূপ, উইন্ডোজ বা লিনাক্সের একটি পাঠ্য ফাইল, কল্পনাযোগ্য সহজতমগুলির মধ্যে একটি, এটি (সাধারণত) ইউটিএফ -8 নয় is
এটি এক্সএমএল হিসাবে সংরক্ষণ করুন এবং এটি ইউটিএফ -8 হিসাবে ঘোষণা করুন:
<?xml version="1.0" encoding="UTF-8"?>
এটি ইউটিএফ -8 হিসাবে ঘোষিত হলেও, এটি সঠিকভাবে প্রদর্শিত হবে না (এটি পড়া হবে না)।
আমার কাছে ফরাসি অক্ষরযুক্ত ডেটার একটি স্ট্রিং ছিল, এটি সিন্ডিকেশনের জন্য এক্সএমএল হিসাবে সংরক্ষণ করা দরকার। প্রথম থেকেই কোনও ইউটিএফ -8 ফাইল তৈরি না করে (আইডিইতে বিকল্পগুলি পরিবর্তন করা এবং "নতুন ফাইল তৈরি করুন") বা ফাইলটির শুরুতে বিওএম যোগ না করা
$file="\xEF\xBB\xBF".$string;
আমি এক্সএমএল ফাইলে ফরাসী অক্ষরগুলি সংরক্ষণ করতে সক্ষম হইনি।
একটি ব্যবহারিক পার্থক্য হ'ল আপনি যদি ম্যাক ওএস এক্সের জন্য একটি শেল স্ক্রিপ্ট লিখেন এবং এটি সরল ইউটিএফ -8 হিসাবে সংরক্ষণ করেন তবে আপনি প্রতিক্রিয়া পাবেন:
#!/bin/bash: No such file or directory
আপনি কোন শেলটি ব্যবহার করতে চান তা উল্লেখ করে শেবাং লাইনের প্রতিক্রিয়া:
#!/bin/bash
আপনি যদি ইউটিএফ -8 হিসাবে সংরক্ষণ করেন তবে কোনও বিওএম ( বিবিএডিতে বলুন ) সব ঠিক থাকবে না।
উপরে উল্লিখিত হিসাবে, বিওএম সহ ইউটিএফ -8 নন-বিওএম-সচেতন (বা সামঞ্জস্যপূর্ণ) সফ্টওয়্যার নিয়ে সমস্যা সৃষ্টি করতে পারে। আমি একবার মোজিলা-ভিত্তিক কমপোজারের সাথে ইউটিএফ -8 + বিওএম হিসাবে এনকোডযুক্ত এইচটিএমএল ফাইলগুলি সম্পাদনা করেছি , ক্লায়েন্ট হিসাবে যে ডাব্লুওয়াইএসআইওয়াইজি প্রোগ্রাম প্রয়োজন ।
সংরক্ষণ করার সময় লেআউটটি সর্বদা ধ্বংস হয়ে যায়। এটি প্রায় আমার পথ কমাতে আমার কিছুটা সময় নিয়েছে। এই ফাইলগুলি ফায়ারফক্সে ভাল কাজ করেছে, কিন্তু ইন্টারনেট এক্সপ্লোরারে একটি সিএসএস কৌতুক দেখিয়েছে, লেআউটটি আবার ধ্বংস করেছে। ঘন্টার জন্য লিঙ্কযুক্ত সিএসএস ফাইলগুলির সাথে কোনও লাভ না করার পরে আমি আবিষ্কার করেছি যে ইন্টারনেট এক্সপ্লোরার বিএমএফড এইচটিএমএল ফাইল পছন্দ করে না। কখনও না.
এছাড়াও, আমি সবেমাত্র এটি উইকিপিডিয়ায় পেয়েছি:
শেবাং অক্ষরগুলি ইউটিএফ -8 সহ বর্ধিত এএসসিআইআই এনকোডিংগুলিতে একই দুটি বাইট দ্বারা উপস্থাপিত হয়, যা বর্তমান ইউনিক্স-মতো সিস্টেমে স্ক্রিপ্ট এবং অন্যান্য পাঠ্য ফাইলগুলির জন্য সাধারণত ব্যবহৃত হয়। তবে, ইউটিএফ -8 ফাইলগুলি alচ্ছিক বাইট অর্ডার চিহ্ন (বিওএম) দিয়ে শুরু হতে পারে; যদি "এক্সিকিউটিভ" ফাংশনটি নির্দিষ্টভাবে বাইট 0x23 0x21 সনাক্ত করে, তবে শেবাংয়ের আগে বিওএম (0xEF 0xBB 0xBF) এর উপস্থিতি স্ক্রিপ্ট দোভাষীকে মৃত্যুদন্ড কার্যকর করতে বাধা দেবে। কিছু কর্তৃপক্ষ POSIX (ইউনিক্সের মতো) স্ক্রিপ্টগুলিতে বাইট অর্ডার চিহ্ন ব্যবহার করার বিরুদ্ধে পরামর্শ দেয়, [15] এই কারণে এবং আরও বৃহত্তর আন্তঃব্যবহারযোগ্যতা এবং দার্শনিক উদ্বেগের জন্য
ইউনিকোড বাইট অর্ডার মার্ক (বিওএম) এফএকিউ একটি সংক্ষিপ্ত উত্তর সরবরাহ করে:
প্রশ্ন: বিএমএস নিয়ে আমার কীভাবে আচরণ করা উচিত?
উত্তর: অনুসরণ করার জন্য এখানে কিছু গাইডলাইন রয়েছে:
একটি নির্দিষ্ট প্রোটোকল (যেমন। টেক্সট ফাইলগুলির জন্য মাইক্রোসফ্ট কনভেনশন) ফাইলের মতো কিছু ইউনিকোড ডেটা স্ট্রিমগুলিতে বিওএম ব্যবহারের প্রয়োজন হতে পারে। আপনার যখন এই জাতীয় প্রোটোকলের সাথে সামঞ্জস্য করা দরকার তখন একটি বিওএম ব্যবহার করুন।
কিছু প্রোটোকল অবিকৃত পাঠ্যের ক্ষেত্রে Bচ্ছিক বিওএমগুলিকে অনুমতি দেয়। এই ক্ষেত্রে,
যেখানে একটি পাঠ্য ডেটা স্ট্রিমটি সরল পাঠ্য হিসাবে পরিচিত, তবে অজানা এনকোডিংয়ের ক্ষেত্রে, বিওএম স্বাক্ষর হিসাবে ব্যবহার করা যেতে পারে। যদি বিওএম না থাকে তবে এনকোডিং কিছু হতে পারে।
যেখানে কোনও পাঠ্য ডেটা স্ট্রিম প্লেইন ইউনিকোড পাঠ্য হিসাবে পরিচিত (তবে কোন এন্ডিয়ান নয়) তবে বিওএম স্বাক্ষর হিসাবে ব্যবহার করা যেতে পারে। যদি বিওএম না থাকে তবে পাঠ্যটি বড়-এন্ডিয়ান হিসাবে ব্যাখ্যা করা উচিত।
কিছু বাইট ভিত্তিক প্রোটোকল একটি ফাইলের শুরুতে ASCII অক্ষর আশা করে। যদি এই প্রোটোকলগুলির সাথে ইউটিএফ -8 ব্যবহার করা হয় তবে এনওডিং ফর্ম স্বাক্ষর হিসাবে বিওএম ব্যবহার করা এড়ানো উচিত।
যেখানে ডেটা স্ট্রিমের সুনির্দিষ্ট প্রকারটি জানা যায় (যেমন ইউনিকোড বিগ-এডিয়ান বা ইউনিকোড লিটল-এন্ডিয়ান), বিওএম ব্যবহার করা উচিত নয়। বিশেষত, যখনই কোনও ডেটা স্ট্রিমটিকে ইউটিএফ -16 বিই হিসাবে ঘোষণা করা হয়, ইউটিএফ-16 এলই, ইউটিএফ -32 বিই বা ইউটিএফ -32 এলই কোনও বিওএম ব্যবহার করা উচিত নয়।
Http://en.wikedia.org/wiki/Byte-order_mark থেকে :
বাইট অর্ডার চিহ্ন (বিওএম) হ'ল একটি ইউনিকোড অক্ষর যা কোনও পাঠ্য ফাইল বা প্রবাহের এন্ডিয়নেস (বাইট ক্রম) সিগন্যাল করতে ব্যবহৃত হয়। এটির কোড পয়েন্ট হ'ল ইউ + এফএফএফ। বিওএম ব্যবহার alচ্ছিক এবং যদি ব্যবহৃত হয় তবে পাঠ্য প্রবাহের শুরুতে উপস্থিত হওয়া উচিত। বাইট-অর্ডার নির্দেশক হিসাবে এর নির্দিষ্ট ব্যবহারের বাইরে, বিওএম অক্ষরটিও ইউনিকোডের বিভিন্ন উপস্থাপনাগুলির মধ্যে কোনটি পাঠ্যটি এনকোড করা হয়েছে তাও নির্দেশ করতে পারে।
আপনার ফাইলে সর্বদা একটি বিওএম ব্যবহার করা নিশ্চিত করে যে এটি সর্বদা সঠিকভাবে একটি সম্পাদকের মধ্যে খোলে যা ইউটিএফ -8 এবং বিওএম সমর্থন করে।
বিওএম এর অনুপস্থিতিতে আমার আসল সমস্যাটি নীচে রয়েছে। মনে করুন আমাদের কাছে একটি ফাইল রয়েছে যা এতে রয়েছে:
abc
বিওএম ছাড়াই এটি বেশিরভাগ সম্পাদকগুলিতে এএনএসআই হিসাবে খোলে। সুতরাং এই ফাইলটির অন্য একজন ব্যবহারকারী এটি খুলবে এবং কিছু নেটিভ অক্ষর যুক্ত করে, উদাহরণস্বরূপ:
abg-αβγ
ওহো ... এখন ফাইলটি এখনও এএনএসআইতে রয়েছে এবং অনুমান করুন যে, "αβγ" 6 বাইট দখল করে না, তবে 3. এটি ইউটিএফ -8 নয় এবং এটি পরবর্তী সময়ে বিকাশ শৃঙ্খলে অন্যান্য সমস্যা সৃষ্টি করে।
ভিজ্যুয়াল স্টুডিও, সোর্সট্রি এবং বিটবকেট পুলের অনুরোধগুলির সাথে আমার অভিজ্ঞতা এখানে রয়েছে যা আমাকে কিছু সমস্যা দিচ্ছে:
সুতরাং এটি একটি বিলি অনুরোধ পর্যালোচনা করার সময় স্বাক্ষরযুক্ত বিওএম প্রতিটি ফাইলের মধ্যে একটি লাল বিন্দু অক্ষর অন্তর্ভুক্ত করবে (এটি বেশ বিরক্তিকর হতে পারে)।
আপনি যদি এটিকে ঘুরে দেখেন তবে এটি "উফেফ" এর মতো একটি চরিত্র দেখাবে, তবে এটি প্রমাণিত হয়েছে সোর্সট্রি এই ধরণের বাইটমার্কগুলি প্রদর্শন করে না, সুতরাং এটি সম্ভবত আপনার টানার অনুরোধগুলিতে শেষ হবে, যা ঠিক হওয়া উচিত কারণ ভিজ্যুয়াল স্টুডিও এইভাবেই 2017 এখন নতুন ফাইল এনকোড করে, তাই সম্ভবত বিটবাকেট এটিকে উপেক্ষা করা উচিত বা এটিকে অন্য উপায়ে প্রদর্শন করা উচিত, আরও তথ্য এখানে:
আপনি যদি HTML ফাইলগুলিতে ইউটিএফ -8 ব্যবহার করেন এবং আপনি যদি সার্বিয়ান সিরিলিক, সার্বীয় লাতিন, জার্মান, হাঙ্গেরিয়ান বা একই পৃষ্ঠায় কিছু বিদেশী ভাষা ব্যবহার করেন তবে একটি বিওএম সহ ইউটিএফ আরও ভাল।
এটি আমার মতামত (কম্পিউটার এবং আইটি শিল্পের 30 বছর)।