বিওএম ছাড়া ইউটিএফ -8 এবং ইউটিএফ -8 এর মধ্যে পার্থক্য কী?


818

বিওএম ছাড়াই ইউটিএফ -8 এবং ইউটিএফ -8 এর মধ্যে আলাদা কী ? কোনটা ভাল?


77
ইউটিএফ -8 বিএম-র চেয়ে সামগ্রীগুলির মাধ্যমে আরও ভালভাবে সনাক্ত করা যায়। পদ্ধতিটি সহজ: ফাইলটি (বা একটি স্ট্রিং) ইউটিএফ -8 হিসাবে পড়ার চেষ্টা করুন এবং যদি এটি সফল হয় তবে ধরে নিন যে ডেটাটি ইউটিএফ -8। অন্যথায় ধরে নিন যে এটি সিপি 1252 (বা অন্য কোনও 8 বিট এনকোডিং)। যে কোনও নন-ইউটিএফ -8 আট বিট এনকোডিংটিতে প্রায়শই অবশ্যই এমন সিকোয়েন্স থাকবে যা ইউটিএফ -8 দ্বারা অনুমোদিত নয়। খাঁটি এএসসিআইআই (7 বিট) ইউটিএফ -8 হিসাবে ব্যাখ্যা করা হয়, তবে ফলাফলটিও সেভাবে সঠিক হয়।
ট্রিক

39
ইউটিএফ -8 সামগ্রীর জন্য বড় ফাইলগুলি স্ক্যান করতে সময় লাগে। একটি বিওএম এই প্রক্রিয়াটিকে আরও দ্রুততর করে তোলে। অনুশীলনে আপনার প্রায়শই দুটোই করা দরকার। অপরাধী আজকাল এটি হ'ল এখনও অনেকগুলি পাঠ্য সামগ্রী ইউনিকোড নয়, এবং আমি এখনও এমন সরঞ্জামগুলিতে ঝাঁপিয়েছি যা বলে যে তারা ইউনিকোড করে (উদাহরণস্বরূপ ইউটিএফ -8) তবে তাদের বিষয়বস্তুকে একটি আলাদা কোডেজ প্রসারণ করে।
জেরোয়েন ওয়েয়ার্ট প্লুমাইমার

10
@ ট্রানিক আমি সত্যই মনে করি না যে এই ক্ষেত্রে "আরও ভাল" ফিট করে। এটি পরিবেশের উপর নির্ভর করে। আপনি যদি নিশ্চিত যে সব হল UTF-8 ফাইল দিয়ে চিহ্নিত করা BOM পরীক্ষণ চেয়ে BOM হয় "better" বা কারণ এটি দ্রুত এবং আরো নির্ভরযোগ্য উপায়।
এমজি

32
ইউটিএফ -8 এর একটি বিওএম নেই। আপনি যখন কোনও ইউটিএফ -8 ফাইল শুরু করার সময় একটি ইউ + এফএফএফ কোড পয়েন্ট স্থাপন করেন, তখন এটি মোকাবেলার জন্য বিশেষ যত্ন নিতে হবে। এটি মাইক্রোসফ্টের মিথ্যা নামকরণগুলির মধ্যে একটি, যেমন কোনও এনকোডিংকে "ইউনিকোড" কল করার মতো কিছু নেই যখন such
tchrist

7
"আধুনিক মেইনফ্রেম (এবং Aix) সামান্য endian হল UTF-8 সচেতন হয়" হল UTF-8 একটি নেই endedness ! কোনও নির্দিষ্ট সিস্টেমের জন্য ডান "অর্ডার" -এর জন্য জোড় বা চারটির গ্রুপ স্থাপন করার জন্য চারপাশে বাইটগুলি কোনও পরিবর্তন হয় না! একটি ইউটিএফ -8 বাইট সিকোয়েন্স সনাক্ত করতে এটি লক্ষণীয় হতে পারে যে মাল্টি-বাইট সিকোয়েন্সের প্রথম কোড বাইট "কোডপয়েন্ট" (যে বাইটগুলি "প্লেইন" এএসসিআইআই নয়) এর এমএস বিট সেট রয়েছে এবং আরও তিন থেকে তিনটি ধারাবাহিকভাবে কম রিসেট বিট পরে কম তাত্পর্যপূর্ণ বিট। এই সেট বিটের মোট সংখ্যা একটি কম বাইট যা সেই কোডডপয়েন্টে রয়েছে এবং তাদের সমস্ত এমএসবি সেট থাকবে ...
স্লাইসভেন

উত্তর:


773

ইউটিএফ -8 বিওএম একটি পাঠ্য স্ট্রিমের শুরুতে বাইটের অনুক্রম ( 0xEF, 0xBB, 0xBF) যা পাঠককে আরও নির্ভরযোগ্যভাবে অনুমান করতে পারে যে কোনও ফাইল ইউটিএফ -8 এ এনকোডড রয়েছে।

সাধারণত, BOM সংকেত ব্যবহার করা হয় endianness একটি এনকোডিং, কিন্তু যেহেতু endianness UTF-8- অপ্রাসঙ্গিক, BOM অপ্রয়োজনীয়।

মতে ইউনিকোড মান , হল UTF-8 ফাইল জন্য BOM বাঞ্ছনীয় নয় :

2.6 এনকোডিং স্কিম

... ইউটিএফ -8 এর জন্য কোনও বিওএমের ব্যবহারের প্রয়োজন হয় না বা সুপারিশ করা হয় না, তবে এমন প্রসঙ্গে দেখা যেতে পারে যেখানে ইউটিএফ -8 ডেটা অন্য এনকোডিং ফর্মগুলি থেকে বিওএম ব্যবহার করে বা যেখানে বিএমটি ইউটিএফ -8 স্বাক্ষর হিসাবে ব্যবহৃত হয় সেখানে রূপান্তরিত হয় । আরও তথ্যের জন্য বিভাগ 16.3, বিশেষগুলিতে "বাইট অর্ডার চিহ্ন" উপধারাটি দেখুন।


114
এটি প্রস্তাবিত হতে পারে না তবে হিব্রু রূপান্তরগুলিতে আমার অভিজ্ঞতা থেকে বিওএম মাঝে মাঝে এক্সেলের ইউটিএফ -8 স্বীকৃতির জন্য অত্যন্ত গুরুত্বপূর্ণ এবং জিব্রিশ এবং হিব্রুয়ের মধ্যে পার্থক্য তৈরি করতে পারে
মতানিয়া

26
এটি প্রস্তাবিত হতে পারে না তবে "æøå" আউটপুট দেওয়ার চেষ্টা করার সময় এটি আমার পাওয়ারশেল স্ক্রিপ্টটিতে আশ্চর্য হয়েছিল
মারিয়াস

63
এটি স্ট্যান্ডার্ড দ্বারা প্রস্তাবিত না হওয়া সত্ত্বেও এটি অনুমোদিত, এবং আমি ইউটিএফ -8 স্বাক্ষর হিসাবে কাজ করার জন্য কিছু ধারণা করা পছন্দ করি না বরং ধরে নেওয়া বা অনুমান করার বিকল্পগুলি। ইউনিকোড-কমপ্লায়েন্ট সফ্টওয়্যার / অবশ্যই তার উপস্থিতি মোকাবেলা করতে সক্ষম হওয়া উচিত, তাই আমি ব্যক্তিগতভাবে এর ব্যবহারকে উত্সাহিত করি।
মার্টিনিউ

30
@ বেমস ৫৩: হ্যাঁ, আদর্শ বিশ্বে ফাইল সিস্টেমের মেটাডেটা হিসাবে টেক্সট ফাইলগুলির এনকোডিং সংরক্ষণ করা এটির সংরক্ষণের আরও ভাল উপায় হবে। তবে আমরা সত্যিকারের বিশ্বে বাস করা বেশিরভাগ লোকেরা আমাদের প্রোগ্রামগুলি ওএস (গুলি) এর ফাইল সিস্টেম পরিবর্তন করতে পারি না - সুতরাং ইউনিকোড স্ট্যান্ডার্ডের প্ল্যাটফর্ম-স্বতন্ত্র বিওএম স্বাক্ষরটি ব্যবহার করা সেরা এবং সবচেয়ে কার্যকর বিকল্প আইএমএইচওর মতো মনে হয়।
মার্টিনিউ

34
@ মার্টিনো ঠিক গতকালই আমি একটি ইউটিএফ -8 বিওএম নিয়ে একটি ফাইলের মধ্যে দৌড়েছি যা ইউটিএফ -8 ছিল না (এটি সিপি 936 ছিল)। দুর্ভাগ্যজনকটি হ'ল ইউটিএফ -8 বিওএম দ্বারা প্রচুর পরিমাণে ব্যথার কারণ হিসাবে দায়বদ্ধ ব্যক্তিরা এটির জন্য বেশিরভাগ ক্ষেত্রে অবজ্ঞাত।
bames53

243

অন্যান্য দুর্দান্ত উত্তর ইতিমধ্যে উত্তর দিয়েছে:

  • ইউটিএফ -8 এবং বিওএম-এড ইউটিএফ -8 এর মধ্যে কোনও অফিসিয়াল পার্থক্য নেই
  • একটি বিএম-এড ইউটিএফ -8 স্ট্রিং নিম্নলিখিত তিনটি বাইট দিয়ে শুরু হবে। EF BB BF
  • ফাইল / স্ট্রিম থেকে স্ট্রিংটি বের করার সময় অবশ্যই সেই বাইটগুলি অবশ্যই উপেক্ষা করা উচিত।

তবে এটির অতিরিক্ত তথ্য হিসাবে, ইউটিএফ -8 এর জন্য বিওএমটি "গন্ধ" পাওয়ার ভাল উপায় হতে পারে যদি ইউটিএফ -8 এ কোনও স্ট্রিং এনকোড করা থাকে ... বা এটি অন্য কোনও এনকোডিংয়ে বৈধ স্ট্রিং হতে পারে ...

উদাহরণস্বরূপ, ডেটা [EF BB BF 41 42 43] হয় হতে পারে:

প্রথম বাইটগুলি দেখে ফাইলের সামগ্রীর এনকোডিংটি স্বীকৃতি দেওয়া যদি শীতল হতে পারে তবে উপরের উদাহরণের দ্বারা দেখানো হিসাবে আপনি এটির উপর নির্ভর করবেন না

এনকোডিংগুলি জানা উচিত, ভাগ্য নয়।


60
@ অ্যালকোট: আপনি সঠিকভাবে বুঝতে পেরেছেন। [EF BB BF 41 42 43] স্ট্রিংটি বাইটের একগুচ্ছ। কীভাবে এটি ব্যাখ্যা করবেন তা চয়ন করার জন্য আপনার বাহ্যিক তথ্য প্রয়োজন। আপনি যদি বিশ্বাস করেন যে এই বাইটগুলি আইএসও -8859-1 ব্যবহার করে এনকোড করা হয়েছিল, তবে স্ট্রিংটি "ï» ¿এবিসি "। আপনি যদি বিশ্বাস করেন যে এই বাইটগুলি ইউটিএফ -8 ব্যবহার করে এনকোড করা হয়েছিল, তবে এটি "এবিসি"। যদি আপনি না জানেন, তবে আপনাকে অবশ্যই এটি অনুসন্ধান করার চেষ্টা করতে হবে। বিওএম ক্লু হতে পারে। ইউটিএফ -8 হিসাবে ডিকোড করা হলে অবৈধ চরিত্রের অনুপস্থিতি অন্যটি হতে পারে ... শেষ পর্যন্ত, আপনি যদি কোনওভাবে এনকোডিং মুখস্ত করতে / সন্ধান করতে না পান তবে বাইটের একটি অ্যারে কেবল বাইটের একটি অ্যারে।
পারা্সেবল

19
@ পেরেসবাল যদিও "ï» ¿"বৈধ ল্যাটিন -১, এটি খুব কমই সম্ভব যে কোনও সংকলন দিয়ে কোনও পাঠ্য ফাইল শুরু হবে। Ucs2-le / be মার্কার for এবং þÿ এর ক্ষেত্রে একই þÿ এছাড়াও আপনি জানতে পারবেন না
ব্যবহারকারীর 877329

16
@ অনুগ্রহ করে এটি সম্ভবত ভাষাতাত্ত্বিকভাবে অবৈধ: প্রথম ï (যা ঠিক আছে), তারপরে কিছু স্থান উদ্ধৃত চিহ্নের মধ্যে স্থান ছাড়াই (ঠিক নেই)। ¿এটি স্পেনীয় নির্দেশ করে তবে স্প্যানিশ ভাষায় used ব্যবহৃত হয় না। উপসংহার: এটি লাতিন -১ নয় একটি নিশ্চিততা ছাড়াই নিশ্চিততার উপরে।
ব্যবহারকারীর 877329

20
@ ব্যবহারকারী নিশ্চিত, এটি অগত্যা বুদ্ধিমান হয় না। তবে যদি আপনার সিস্টেমটি অনুমানের উপর নির্ভর করে , তবে সেখানেই অনিশ্চয়তা চলে আসে Some কিছু দূষিত ব্যবহারকারী উদ্দেশ্য নিয়ে এই 3 টি বর্ণ দিয়ে শুরু হওয়া পাঠ্য জমা দেয় এবং আপনার সিস্টেমটি হঠাৎ ধরে নেয় যে এটি একটি বিওএম দিয়ে ইউটিএফ -8 এর দিকে তাকিয়েছে, পাঠ্যটিকে ইউটিএফ -8 হিসাবে বিবেচনা করে এটি ল্যাটিন -১ ব্যবহার করা উচিত এবং কিছু ইউনিকোড ইঞ্জেকশন সঞ্চালিত হয়। কেবল একটি অনুমানমূলক উদাহরণ, তবে অবশ্যই সম্ভব। আপনি কোনও পাঠ্যের এনকোডিংয়ের সময়সীমা, সময় অনুযায়ী বিচার করতে পারবেন না।
প্রতারণা করুন

40
"এনকোডিংগুলি জানা উচিত, ভাগ করা উচিত নয়" " সমস্যা হৃদয় এবং আত্মা। +1, ভাল স্যার। অন্য কথায়: হয় আপনার কন্টেন্টকে প্রমিত করুন এবং বলুন, "আমরা সবসময় এই এনকোডিংটি ব্যবহার করি Per সময়কাল itভাবে সেভাবে লিখুন it সেভাবেই পড়ুন," বা একটি বর্ধিত বিন্যাস বিকাশ করুন যা এনকোডিংকে মেটাডেটা হিসাবে সংরক্ষণ করার অনুমতি দেয়। (দ্বিতীয়টির সম্ভবত সম্ভবত কিছু "বুটস্ট্র্যাপ স্ট্যান্ডার্ড এনকোডিং" দরকার আছে
saying যেমনটি

135

ইউটিএফ -8 এনকোডযুক্ত ফাইলগুলিতে বিওএম স্থাপন করার ক্ষেত্রে কমপক্ষে তিনটি সমস্যা রয়েছে।

  1. যে ফাইলগুলিতে কোনও পাঠ্য নেই তা আর খালি নেই কারণ এগুলিতে সর্বদা বিওএম থাকে।
  2. UTF-8 এর ASCII সাবসেটের মধ্যে থাকা পাঠ্যগুলি যে ফাইলগুলি ধারণ করে সেগুলি এখন আর এএসসিআইআই নয় কারণ বিওএম ASCII নয়, যা কিছু বিদ্যমান সরঞ্জামগুলি ভেঙে দেয় এবং ব্যবহারকারীদের পক্ষে এই জাতীয় উত্তরাধিকার সরঞ্জামগুলি প্রতিস্থাপন করা অসম্ভব হতে পারে।
  3. এক সাথে বেশ কয়েকটি ফাইল একত্রিত করা সম্ভব নয় কারণ প্রতিটি ফাইলের শুরুতে একটি বিওএম রয়েছে।

এবং, অন্যরা যেমন বলেছে, কোনও কিছু ইউটিএফ -8 সনাক্ত করার জন্য কোনও বিওএম থাকাও যথেষ্ট নয় বা প্রয়োজনীয়ও নয়:

  • এটি পর্যাপ্ত নয় কারণ বিউএম গঠন করে এমন সিক্যুয়েন্স দিয়ে শুরু করতে একটি নির্বিচারে বাইট সিকোয়েন্স ঘটতে পারে।
  • এটি প্রয়োজনীয় নয় কারণ আপনি কেবল বাইটগুলি পড়তে পারেন যেন তারা ইউটিএফ -8; যদি এটি সফল হয় তবে এটি সংজ্ঞা অনুসারে বৈধ ইউটিএফ -8।

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

7
দ্বিতীয় বিন্দু, "যে ফাইলগুলিতে ASCII পাঠ্য রয়েছে সেগুলি আর এএসসিআইআই নয়", এটি ASCII কে ইউটিএফ -8 এর সাথে সংযুক্ত করে। একটি UTF-8 ফাইল যা ASCII পাঠ্য ধারণ করে ASCII নয়, এটি UTF-8। একইভাবে, ASCII পাঠ্য ধারণ করে এমন একটি UTF-16 ফাইল ASCII নয়, এটি UTF-16। ইত্যাদি। এএসসিআইআই একটি 7-বিট সিঙ্গল বাইট কোড। ইউটিএফ -8 হ'ল এএসসিআইআইয়ের একটি 8-বিট ভেরিয়েবল দৈর্ঘ্য প্রসার। > 127 মানগুলির কারণে যদি "সরঞ্জামগুলি ভেঙে যায়" তবে তারা 8-বিট বিশ্বের জন্য উপযুক্ত নয়। একটি সাধারণ ব্যবহারিক সমাধান হ'ল ASCII ফাইলগুলি কেবলমাত্র এমন সরঞ্জামগুলির সাথে ব্যবহার করা যা অ-ASCII বাইট মানগুলির জন্য ব্যর্থ হয়। সম্ভবত সবচেয়ে ভাল সমাধান হ'ল সেই ungood সরঞ্জামগুলি খনন করা।
চিয়ার্স এবং এইচটিএইচ - আলফ

8
পুনরায় পয়েন্ট 3, "এক সাথে বেশ কয়েকটি ফাইল একত্রিত করা সম্ভব নয় কারণ প্রতিটি ফাইলের শুরুতে একটি বিওএম থাকে" ঠিক ভুল। বিওএম-এর সাথে ইউটিএফ -8 ফাইলগুলি যুক্ত করতে আমার কোনও সমস্যা নেই, সুতরাং এটি স্পষ্টভাবে সম্ভব। আমি মনে করি সম্ভবত আপনি ইউনিক্স-জমি বোঝাতে চেয়েছিলেন catআপনাকে একটি পরিষ্কার ফলাফল দেবে না , এর ফলস্বরূপ কেবল শুরুতে বিওএম রয়েছে। যদি আপনি এর অর্থ বোঝাতে থাকেন, তবে এটি কারণ catবাইট স্তরে কাজ করে, ব্যাখ্যা করা বিষয়বস্তু স্তরে নয়, এবং অনুরূপ ফ্যাশনে catফটোগ্রাফগুলি নিয়ে কাজ করতে পারে না, বলুন। তবুও এটি খুব বেশি ক্ষতি করে না। কারণ বিওএম একটি শূন্য প্রস্থের অবিচ্ছেদী স্থানকে এনকোড করে।
চিয়ার্স এবং এইচটিএইচ - আলফ

19
@ চিয়ারসান্থ.-আলফ এই উত্তরটি সঠিক। আপনি কেবল মাইক্রোসফ্ট বাগগুলি নির্দেশ করছেন।
tchrist

9
@ ব্রাইট: বোমা যুক্ত করে পরিস্থিতি কোনও উন্নত হয়নি।
Deduplicator

84

এখানে বিওএম ব্যবহারের উদাহরণ রয়েছে যা প্রকৃত সমস্যা সৃষ্টি করে এবং এখনও অনেকে এ সম্পর্কে জানেন না।

বিওএম স্ক্রিপ্ট ভেঙে দেয়

শেল স্ক্রিপ্টস, পার্ল স্ক্রিপ্টস, পাইথন স্ক্রিপ্টস, রুবি স্ক্রিপ্টস, নোড.জেএস স্ক্রিপ্ট বা অন্য কোনও এক্সিকিউটেবল যা কোনও দোভাষী দ্বারা চালিত করা দরকার - সবগুলি একটি শেবাং লাইন দিয়ে শুরু করুন যা এর মধ্যে একটির মতো দেখাচ্ছে:

#!/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

মনে রাখবেন যে:

  1. UTF-32BE তিনটি NUL টি দিয়ে শুরু করে না, সুতরাং এটি স্বীকৃত হবে না
  2. ইউটিএফ -32 এলই প্রথম বাইটটি তিনটি এনইউল অনুসরণ করে না, সুতরাং এটি স্বীকৃত হবে না
  3. UTF-16BE এর প্রথম চারটি বাইটে একটি মাত্র NUL রয়েছে, সুতরাং এটি স্বীকৃত হবে না
  4. UTF-16LE এর প্রথম চারটি বাইটে কেবল একটি NUL রয়েছে, তাই এটি স্বীকৃত হবে না

বাস্তবায়নের উপর নির্ভর করে, এগুলির সকলকে ইউটিএফ -8 হিসাবে ভুলভাবে ব্যাখ্যা করা যেতে পারে এবং তারপরে ভুল ব্যাখ্যা করা বা অবৈধ ইউটিএফ -8 হিসাবে প্রত্যাখ্যান করা বা একেবারেই স্বীকৃত নয়।

অতিরিক্ত হিসাবে, যদি আমি প্রস্তাবিত হিসাবে বৈধ JSON এর জন্য বাস্তবায়ন পরীক্ষা করি তবে এটি ইউটিএফ -8 হিসাবে প্রকৃতপক্ষে এনকোড হওয়া এমনকি এমন ইনপুটকেও প্রত্যাখ্যান করবে কারণ এটি আরএফসি অনুসারে হওয়া উচিত ASCII অক্ষর <128 দিয়ে শুরু হয় না।

অন্যান্য ডেটা ফর্ম্যাট

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

জেএসএনের চেয়ে অন্যান্য ডেটা ফর্ম্যাটগুলির জন্য, এটি কীভাবে প্রকৃত দেখায় তা একবার দেখুন। যদি কেবলমাত্র এনকোডিংগুলি ইউটিএফ- * হয় এবং প্রথম অক্ষরটি অবশ্যই 128 এর চেয়ে কম ASCII অক্ষর হতে পারে তবে আপনার ডেটাটির এনকোডিং এবং শেষেরতা উভয় নির্ধারণ করতে আপনার কাছে ইতিমধ্যে প্রয়োজনীয় সমস্ত তথ্য রয়েছে। এমনকি OMচ্ছিক বৈশিষ্ট্য হিসাবে বিওএম যুক্ত করা এটিকে আরও জটিল এবং ত্রুটির প্রবণ করে তুলবে।

বিওএম এর অন্যান্য ব্যবহার

JSON বা স্ক্রিপ্টগুলির বাইরের ব্যবহার হিসাবে, আমি মনে করি এখানে ইতিমধ্যে খুব ভাল উত্তর রয়েছে। স্ক্রিপ্টিং এবং সিরিয়ালাইজেশন সম্পর্কে আমি আরও বিশদ তথ্য যুক্ত করতে চেয়েছিলাম, কারণ এটি বিওএম চরিত্রগুলির উদাহরণ যা সত্যিকারের সমস্যা সৃষ্টি করে।


5
rfc7159 যা rfc4627 কে অতিক্রম করে আসলে প্রস্তাব দেয় যে বিওএমকে সমর্থন করা এত মন্দ নাও হতে পারে। মূলত একটি বিওএম না থাকা কেবল একটি দ্বিধাদ্বন্দ্বপূর্ণ কলজ যাতে ইউনিকোড-সচেতন নয় এমন পুরানো উইন্ডোজ এবং ইউনিক্স সফ্টওয়্যার এখনও utf-8 প্রক্রিয়া করতে পারে।
এরিক গ্রেঞ্জ

2
পার্স স্ক্রিপ্টস, পাইথন স্ক্রিপ্টস, রুবি স্ক্রিপ্টস, নোড.জেএস এর সাথে একইভাবে সমর্থন করার জন্য জেএসএনের মতো আপডেটের প্রয়োজন ounds কেবলমাত্র এই প্ল্যাটফর্মগুলি সমর্থন অন্তর্ভুক্ত না করা বেছে নিয়েছে, অগত্যা বিওএমের জন্য ব্যবহারকে হত্যা করবে না। অ্যাপল কয়েক বছর ধরে অ্যাডোবকে হত্যা করার চেষ্টা করছে এবং অ্যাডোব এখনও রয়েছে। তবে একটি আলোকিত পোস্ট।
এইচটিএম 11h

12
@ এরিকগ্র্যাঞ্জ, আপনি বিওএমকে খুব দৃ strongly় সমর্থন দিচ্ছেন বলে মনে করছেন, তবে এটি বুঝতে ব্যর্থ হন যে এটি সর্বব্যাপী, সর্বজনীনভাবে কার্যকর, সর্বোত্তম-সর্বনিম্ন " সর্বনিম্ন " সরল পাঠ্য "ফর্ম্যাটটিকে প্রাক-ইউটিএফ 8 অতীতের একটি প্রতিলিপি সরবরাহ করবে! প্লেইন পাঠ্য স্ট্রিমে কোনও ধরণের (ইন-ব্যান্ড) শিরোনাম যুক্ত করা সংজ্ঞা অনুসারে সহজ পাঠ্য ফাইলগুলিতে বাধ্যতামূলক প্রোটোকল চাপিয়ে দেবে, এটি আর কখনও 'সিমপ্লেস্ট' না করে! আর কী লাভের জন্য? সকল সমর্থন অন্যান্য , প্রাচীন সিপি এনকোডিং যে এছাড়াও , স্বাক্ষর ছিল না যাতে করে আপনি সেগুলিকে হল UTF-8 সঙ্গে ভুল হতে পারে? (বিটিডাব্লু, এএসসিআইআইও ইউটিএফ -৮, এছাড়াও। সুতরাং, তাদের কাছে একটি বিওএমও, খুব ?;) আসুন))
এসজেড।

2
এই উত্তরটির কারণেই আমি এই প্রশ্নে উঠে এসেছি! আমি উইন্ডোজে আমার বাশ স্ক্রিপ্টগুলি তৈরি করি এবং লিনাক্সে এই স্ক্রিপ্টগুলি প্রকাশ করার সময় প্রচুর সমস্যা অনুভব করি! জেসন ফাইলগুলির সাথে একই জিনিস।
টোনো নাম

2
আমি আশা করি আমি এই জবাবটি প্রায় পঞ্চাশ বার ভোট দিতে পারতাম। আমি আরও যোগ করতে চাই যে এই মুহুর্তে, ইউটিএফ -8 মান যুদ্ধে জিতেছে, এবং ইন্টারনেটে উত্পাদিত প্রায় সমস্ত পাঠ্যই ইউটিএফ -8। কয়েকটি সর্বাধিক জনপ্রিয় প্রোগ্রামিং ভাষা (যেমন সি # এবং জাভা) ইউটিএফ -16 অভ্যন্তরীণভাবে ব্যবহার করে তবে প্রোগ্রামাররা যখন এই ভাষাগুলি ব্যবহার করে আউটপুট প্রবাহগুলিতে ফাইলগুলি লেখেন, তারা প্রায়শই তাদের ইউটিএফ -8 হিসাবে এনকোড করে। অতএব, কোনও ইউটিএফ -8 ফাইল চিহ্নিত করার জন্য কোনও বিওএম থাকা আর বোঝা যায় না; ইউটিএফ -8 পড়ার সময় আপনি যে ডিফল্ট ব্যবহার করেন তা হ'ল এবং ইউটিএফ -8 ডিকোডিং ব্যর্থ হলে কেবলমাত্র অন্য এনকোডিংগুলি ব্যবহার করে দেখুন।
রমুন

51

বিওএম ছাড়া ইউটিএফ -8 এবং ইউটিএফ -8 এর মধ্যে আলাদা কী?

সংক্ষিপ্ত উত্তর: ইউটিএফ -8 এ, EF BB BFফাইলের শুরুতে একটি বিওএম বাইট হিসাবে এনকোড করা হয় ।

দীর্ঘ উত্তর:

মূলত, আশা করা হয়েছিল যে ইউনিকোডটি ইউটিএফ -16 / ইউসিএস -2 এ এনকোড হবে। বিওএম এই এনকোডিং ফর্মটির জন্য ডিজাইন করা হয়েছিল। আপনার যখন 2-বাইট কোড ইউনিট রয়েছে, তখন সেই দুটি বাইট কোন অর্ডারে রয়েছে তা নির্দেশ করা দরকার, এবং এটি করার জন্য একটি সাধারণ সম্মেলন হ'ল ডেটা শুরুতে U + FEFF অক্ষরটি "বাইট অর্ডার চিহ্ন" হিসাবে অন্তর্ভুক্ত করা। U + FFFE অক্ষরটি স্থায়ীভাবে অ-নিযুক্ত করা হয়েছে যাতে এর উপস্থিতিটি ভুল বাইট ক্রম সনাক্ত করতে ব্যবহার করা যায়।

প্ল্যাটফর্মের শেষের দিক বিবেচনা না করেই ইউটিএফ -8 এর একই বাইট অর্ডার রয়েছে, সুতরাং বাইট অর্ডার চিহ্নের প্রয়োজন হয় না। তবে, এটি EF BB FFইউটিএফ -16 থেকে ইউটিএফ -8 এ রূপান্তরিত ডেটাতে (বাইট ক্রম হিসাবে ) বা ডেটা ইউটিএফ -8 হ'ল একটি "স্বাক্ষর" হিসাবে উপস্থিত হতে পারে।

কোনটা ভাল?

ছাড়া. মার্টিন কোট উত্তর হিসাবে, ইউনিকোড স্ট্যান্ডার্ড এটি সুপারিশ করে না। এটি নন-বিওএম-সচেতন সফ্টওয়্যার নিয়ে সমস্যা সৃষ্টি করে।

কোনও ফাইল ইউটিএফ -8 কিনা তা সনাক্ত করার আরও ভাল উপায় হ'ল বৈধতা পরীক্ষা করা। ইউটিএফ -8 এর বাইট সিকোয়েন্সগুলি বৈধ কিনা তা সম্পর্কে কঠোর নিয়ম রয়েছে, সুতরাং মিথ্যা ধনাত্মক হওয়ার সম্ভাবনা নগণ্য। যদি কোনও বাইট সিকোয়েন্সটি ইউটিএফ -8 এর মতো দেখা যায় তবে এটি সম্ভবত।


8
এটি এতে একক ভ্রান্ত বাইট সহ বৈধ ইউটিএফ -8 বাতিল করে দেবে, যদিও: /
এন্ডোলিথ

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

6
না, ইউটিএফ -8 এর কোনও বিওএম নেই। এই উত্তরটি ভুল। ইউনিকোড স্ট্যান্ডার্ড দেখুন।
tchrist

2
এমনকি বাইটসটি দেখার সময় আপনি ভাবতে পারেন যে আপনার খাঁটি এএসসিআইআই ফাইল রয়েছে। তবে এটি একটি utf-16 ফাইলও হতে পারে যেখানে আপনাকে বাইটস না করে শব্দের দিকে নজর দিতে হবে। আধুনিক সফটওয়্যারগুলি বিওএম সম্পর্কে সচেতন হওয়া উচিত। অবৈধ সিকোয়েন্সগুলি সনাক্ত করে এমন কোডডপয়েন্টস যা একটি ছোট সিকোয়েন্স বা সার্গেটগুলি সহ কোডপয়েন্ট ব্যবহার করতে পারে তা সনাক্ত করতে এখনও utf-8 পড়া ব্যর্থ হতে পারে। Utf-16 এর জন্য পড়তে খুব ব্যর্থ হতে পারে যখন অনাথ সরোগেট থাকে।
উজ্জ্বল

1
@ অ্যালাফ, আমি " প্ল্যাটফর্ম-নির্দিষ্ট , একটি সরু ইউনিক্স-স্থল দৃষ্টিকোণ " হিসাবে একটি বি-বিওএম-মনোভাবের আপনার ব্যাখ্যার সাথে একমত নই । আমার কাছে, "ইউনিক্স ল্যান্ড" এর সাথে সংকীর্ণতার একমাত্র উপায় যদি এমএস এবং ভিজ্যুয়াল সি ++ * এনআইএক্স এর আগে আসে, যা তারা করেনি। সত্য যে মাইক্রোসফট (আমি জেনেশুনে অনুমান) হল UTF-8 বদলে হল UTF-16 একটি BOM ব্যবহার শুরু আমাকে বলে যে তারা ভঙ্গ পদোন্নতি sh, perl, g++, এবং অন্যান্য অনেক মুক্ত ও শক্তিশালী সরঞ্জাম। জিনিস কাজ করতে চান? শুধু এমএস সংস্করণ কিনুন । এমএস তাদের \ x80- \ x95 রেঞ্জের বিপর্যয়ের মতো প্ল্যাটফর্ম-নির্দিষ্ট সমস্যা তৈরি করেছে।
bবলldave025

30

বিওএম সহ ইউটিএফ -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 )


6
এক্সেল ব্যবহারের জন্য যদি কেউ ইউটিএফ -8 ফাইল তৈরি করে তবে এই দুর্দান্ত টিপটির জন্য ধন্যবাদ। যদিও অন্য পরিস্থিতিতে আমি অন্য উত্তরগুলি অনুসরণ করে বিওএম এড়িয়ে যাব।
বারফুইন

5
এটি কেবল কার্যকর যদি আপনি এমন ফাইল তৈরি করেন যা কেবলমাত্র ASCII থাকে এবং পরে এটিতে অ-এসসিআই যুক্ত থাকতে পারে। আমি সবেমাত্র এ জাতীয় সমস্যার সমাধান করেছি: সফ্টওয়্যার যা ইউটিএফ 8 আশা করে, ব্যবহারকারী সম্পাদনার জন্য কিছু ডেটা দিয়ে ফাইল তৈরি করে। যদি প্রাথমিক ফাইলটিতে কেবল এএসসিআইআই থাকে, কিছু সম্পাদকগুলিতে খোলা হয় এবং তারপরে সেভ করা হয়, এটি ল্যাটিন -1 এ শেষ হয় এবং সমস্ত কিছু ব্রেক হয়ে যায়। যদি আমি বিওএম যোগ করি তবে এটি সম্পাদক দ্বারা UTF8 হিসাবে সনাক্ত হবে এবং সমস্ত কিছু কাজ করে।
রবার্তো আলসিনা

1
আমি একাধিক প্রোগ্রামিং সম্পর্কিত সরঞ্জাম পেয়েছি যার জন্য ইউটিএফ -8 ফাইলগুলি সঠিকভাবে চিনতে BOM প্রয়োজন। ভিজ্যুয়াল স্টুডিও, এসএসএমএস, সৌরেট্রি ....
কেজবার্টেল

5
আপনি আরএফসিতে কোনও বিওএম ব্যবহার করার জন্য একটি সুপারিশটি কোথায় পড়বেন ? বেশিরভাগ ক্ষেত্রে, এমন কিছু পরিস্থিতিতে যেখানে এটি করা কঠিন সেখানে এটি নিষেধ না করার জন্য একটি জোরালো সুপারিশ রয়েছে।
হস্তান্তরকারী

8
এক্সেল মনে করে এটি এএনএসআই করেছে এবং জিব্রিশ দেখাচ্ছে তখন সমস্যাটি এক্সেলের মধ্যে রয়েছে।
আইজাক

17

বিওএম কোথাও কোথাও কোথাও কোথাও কোথাও কোথাও বাজে (কোন পাং উদ্দেশ্যে (sic) নয়) to এবং যখন এটি উত্সাহিত হয় (উদাহরণস্বরূপ, ব্রাউজারগুলি, সম্পাদকগুলি ইত্যাদি দ্বারা স্বীকৃত হয় না), এটি নথির শুরুতে অদ্ভুত অক্ষর হিসাবে প্রদর্শিত হয় (উদাহরণস্বরূপ, এইচটিএমএল ফাইল, জেএসএন প্রতিক্রিয়া, আরএসএস , ইত্যাদি) এবং টুইটারে ওবামার আলাপ চলাকালীন সাম্প্রতিক এনকোডিং ইস্যুর মতো ধরণের বিব্রতকর কারণ ঘটায় ।

এটি খুব বিরক্তিকর হয় যখন এটি ডিবাগ করা শক্ত জায়গায় বা পরীক্ষার অবহেলা করা হয় shows সুতরাং আপনি এটি ব্যবহার না করা অবধি এটি এড়ানো ভাল।


হ্যাঁ, বিওএম ছাড়াই ইউটিএফ -8 এর পরিবর্তে কোনও ফাইলকে ইউটিএফ -8 হিসাবে এনকোড করা হওয়ার কারণে সমস্যাটি সনাক্ত করতে কয়েক ঘন্টা ব্যয় হয়েছে। (বিষয়টি কেবল আই 7 তে প্রকাশিত হয়েছে যাতে এটি আমাকে বেশ হংসের তাড়া করতে পরিচালিত করেছিল I আমি জ্যাঙ্গোর "অন্তর্ভুক্ত" ব্যবহার করেছি))
ব্যবহারকারী 984003

ভবিষ্যতের পাঠকগণ: নোট করুন যে আমি উপরে উল্লিখিত টুইট ইস্যুটি বিওএম-এর সাথে কঠোরভাবে সম্পর্কিত ছিল না, তবে যদি তা হয় তবে টুইটটি একইভাবে তৈরি করা হত, তবে টুইটটির শুরুতে।
হালিল Özgür

12
@ user984003 না, সমস্যা হ'ল মাইক্রোসফ্ট আপনাকে বিভ্রান্ত করেছে। এটি যা ইউটিএফ -8 বলে তা ইউটিএফ -8 নয়। এটি বিওএম ছাড়াই ইউটিএফ -8 বলে যা সত্যই এটি ইউটিএফ -8।
tchrist

"sic" আপনার "কোন
পাং এর

2
@JoelFan আমি আর প্রত্যাহার করতে পারবেন না কিন্তু আমি শ্লেষ লেখক যদিও মেয়েটি দাবি :) উদ্দেশ্যে য়েত অনুমান
Halil Özgür

17

প্রশ্ন: বিওএম ছাড়াই ইউটিএফ -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 এর মাধ্যমে সমর্থন সরবরাহ করে ।


5
আমি BOM ছাড়া কঠোর করা ভাল । আমি দেখতে পেয়েছি .htaccessএবং gzip compressionইউটিএফ -8 এর সাথে মিলে বিওএম একটি এনকোডিং ত্রুটি দেয় ইউটিএফ -8 এ এনকোডিং-এ পরিবর্তন করুন বিওএম ছাড়াই এখানে একটি পরামর্শ অনুসরণ করুন যা সমস্যার সমাধান করা হয়েছে
চেতাবহানা

1
'বিওএম ব্যবহার না করার জন্য আরেকটি অনুপ্রেরণা হল ইউটিএফ -8 কে "ডিফল্ট" এনকোডিং হিসাবে উত্সাহিত করা' ' - কোন তাত্পর্যপূর্ণ এবং একটি যুক্তি বৈধ, যা আপনি আসলে উত্তরটি সেখানে থামিয়ে দিতে পারতেন! ...; - আপনি সর্বজনীন পাঠ্য উপস্থাপনের জন্য যদি না আরও ভাল ধারণা পান তবে তা। ;) (ইউটিএফ 8 প্রাক যুগে আপনাকে কত বছর ধরে কষ্ট সহ্য করতে হয়েছিল তা আমি জানি না (ভাষাবিদরা যখন তাদের বর্ণমালা পরিবর্তন করার জন্যও মরিয়া হয়েছিলেন), তবে আমি আপনাকে বলতে পারি যে প্রতি সেকেন্ডে আমরা বিদ্রূপের কাছাকাছি চলে যাই "এক" থাকার পরিবর্তে প্রাচীন-একক-বাইট-নন-মেটাডেটা এনকোডিংগুলির জগাখিচুড়ি খাঁটি আনন্দ))
এসজেড।

টেক্সট ফাইল ফর্ম্যাটগুলির সহজতম "ব্লেইন টেক্সট" এর সাথে একটি বিওএম (বা কিছু!) যুক্ত করার অর্থ এই মন্তব্যটি দেখুন , এর অর্থ হ'ল সর্বোত্তম সর্বজনীন পাঠ্য এনকোডিং বিন্যাসকে "সরল", এবং "সরল" হওয়া (যেমন) হওয়া থেকে বিরত রাখা উচিত "ওভারহেডলেস") ... ...
জেড

বিওএম বেশিরভাগ ক্ষেত্রে লিনাক্সে সমস্যাযুক্ত কারণ অনেকগুলি ইউটিলিটিগুলি ইউনিকোডটি শুরু করার পক্ষে সত্যই সমর্থন করে না (উদাহরণস্বরূপ কোডেপয়েন্টের মাঝখানে তারা আনন্দের সাথে কাটবে)। অন্যান্য আধুনিক সফ্টওয়্যার পরিবেশের জন্য, যখনই এনকোডিংটি দ্ব্যর্থহীন না হয় (স্পেস বা মেটাডেটার মাধ্যমে) বিওএম ব্যবহার করুন।
এরিক গ্রেঞ্জ

9

এই প্রশ্নের ইতিমধ্যে একটি মিলিয়ন-ও-উত্তর উত্তর রয়েছে এবং সেগুলির অনেকগুলি বেশ ভাল, তবে আমি কখন বিএমও ব্যবহার করা উচিত বা কখন ব্যবহার করা উচিত নয় তা চেষ্টা করে পরিষ্কার করতে চেয়েছিলাম।

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

যদি ইউটিএফ -8 বিওএম-এর সাথে সম্পর্কিত কোনও বাইট কোড পাওয়া যায়, তবে এটি ইউটিএফ -8 ধরে নেওয়ার সম্ভাবনা যথেষ্ট বেশি এবং আপনি সেখান থেকে যেতে পারেন। এই অনুমান করতে বাধ্য করা হলে, পড়ার সময় অতিরিক্ত ত্রুটি যাচাই করা এখনও কিছু ঠিকঠাক আসার ক্ষেত্রে ভাল ধারণা হতে পারে। আপনার কেবলমাত্র ধরে নেওয়া উচিত যে কোনও বিওএম ইউটিএফ -8 (যেমন লাতিন -১ বা এএনএসআই) নয় তবে যদি ইনপুটটি অবশ্যই উত্সের ভিত্তিতে ইউটিএফ -8 না হয়। যদি কোনও বিওএম না থাকে তবে, আপনি কেবল এনকোডিংয়ের বিরুদ্ধে বৈধতা দিয়ে ইউটিএফ -8 হওয়ার কথা কিনা তা নির্ধারণ করতে পারেন।

কেন একটি বিওএমের সুপারিশ করা হয় না?

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

কখন আপনাকে একটি বিওএম দিয়ে এনকোড করা উচিত ?

আপনি যদি অন্য কোনও উপায়ে মেটাডেটা রেকর্ড করতে অক্ষম হন (একটি চরসেট ট্যাগ বা ফাইল সিস্টেম মেটার মাধ্যমে), এবং প্রোগ্রামগুলি বিওএম এর মতো ব্যবহৃত হচ্ছে, আপনার একটি বিওএম দিয়ে এনকোড করা উচিত। এটি উইন্ডোজে বিশেষত সত্য যেখানে বিওএম ব্যতীত যে কোনও কিছু সাধারণত একটি লিগ্যাসি কোড পৃষ্ঠা ব্যবহার করা হয় বলে ধরে নেওয়া হয়। বিওএম অফিসের মতো প্রোগ্রামগুলিকে বলে যে হ্যাঁ, এই ফাইলটির পাঠ্যটি ইউনিকোড; এখানে ব্যবহৃত এনকোডিং।

এটি যখন নেমে আসে তখন কেবলমাত্র আমার কেবলমাত্র ফাইলগুলির মধ্যেই সিএসভি হয়। প্রোগ্রামের উপর নির্ভর করে এটির একটি অবশ্যই BOM থাকা উচিত। উদাহরণস্বরূপ, আপনি যদি উইন্ডোজে এক্সেল 2007+ ব্যবহার করেন তবে আপনি যদি এটি সহজেই খুলতে চান এবং ডেটা আমদানি করতে না চান তবে এটি অবশ্যই একটি বিওএমের সাথে এনকোড করা উচিত।


2
আপনার উত্তরের শেষ বিভাগটি 100% সঠিক: বিওএম ব্যবহারের একমাত্র কারণ হ'ল আপনি যখন বগি সফ্টওয়্যারটির সাথে ইন্টারঅ্যাক্ট করতে পারেন যা অজানা ফাইলগুলি পার্স করার জন্য ইউটিএফ -8 এর ডিফল্ট হিসাবে ব্যবহার করে না।
রম্মান

8

এটি লক্ষ্য করা উচিত যে কিছু ফাইলের জন্য আপনার উইন্ডোজ এমনকি বিওএম থাকা উচিত নয় । উদাহরণগুলি SQL*plusবা VBScriptফাইল। যদি এই ধরনের ফাইলগুলিতে একটি বিওএম থাকে তবে আপনি সেগুলি কার্যকর করার চেষ্টা করার সময় আপনি একটি ত্রুটি পান।


8

বিওএম সহ ইউটিএফ -8 কেবলমাত্র তখনই সহায়তা করে যদি ফাইলে আসলে কিছু অ-এএসসিআইআই অক্ষর থাকে। যদি এটি অন্তর্ভুক্ত থাকে এবং এর মধ্যে কিছু না থাকে তবে সম্ভবত এটি পুরানো অ্যাপ্লিকেশনগুলি ভেঙে ফেলবে যা অন্যথায় ফাইলটিকে সরল ASCII হিসাবে ব্যাখ্যা করবে। এই অ্যাপ্লিকেশনগুলি স্পষ্টতই ব্যর্থ হয়ে যাবে যখন এগুলি ASCII ব্যতীত কোনও অক্ষর জুড়ে আসে, সুতরাং আমার মতে BOM কেবল তখনই যুক্ত করা উচিত যখন ফাইলটি করতে পারে, এবং আর প্লেইন ASCII হিসাবে ব্যাখ্যা করা উচিত নয়।

আমি এটা পরিষ্কার করতে চাই যে আমি বিওএম মোটেও পছন্দ না করাই পছন্দ করি। এটি ছাড়া যদি কোনও পুরানো আবর্জনা ভাঙা যায় এবং সেই উত্তরাধিকার অ্যাপ্লিকেশনটি প্রতিস্থাপন করা সম্ভব না হয় তবে এতে যুক্ত করুন।

ইউটিএফ -8 এর জন্য কোনও বিওএম আশা করবেন না।


7

বিওএম-তে উইকিপিডিয়া পৃষ্ঠার নীচে উদ্ধৃত: http://en.wikedia.org/wiki/Byte-order_mark#cite_note-2

"ইউটিএফ -8 এর জন্য কোনও বিওএমের ব্যবহারের প্রয়োজন হয় না বা সুপারিশ করা হয় না, তবে ইউটিএফ -8 ডেটা কোনও এনওডিং ফর্ম থেকে রূপান্তরিত হয় যেখানে বিওএম ব্যবহার করে বা যেখানে বিএমটি ইউটিএফ -8 স্বাক্ষর হিসাবে ব্যবহৃত হয়"


2
পূর্ববর্তী এনকোডিংটি যেটি থেকে এনকোডিং করা হচ্ছে, তার একটি বিওএম ছিল কিনা তার ভিত্তিতে সফটওয়্যার বিওএম সহ / ছাড়া ইউটিএফ -8 ব্যবহার করবেন কিনা সে বিষয়ে সিদ্ধান্ত নেওয়ার কোনও উদাহরণ আছে কি ?! এটি একটি অযৌক্তিক দাবির মতো বলে মনে হচ্ছে
বার্লোপ

7

বিএমএম ছাড়াই ইউটিএফ -8 এর কোনও বিওএম নেই, যা ফাইলের গ্রাহককে ফাইলটি ইউটিএফ -৮-এনকোডড রয়েছে কিনা তা জানতে (বা জেনে সুবিধা হবে) ব্যতীত, বিওএমের সাথে এটি ইউটিএফ -8 এর চেয়ে ভাল আর কোনও করে তোলে না except অথবা না.

বিএমটি সাধারণত এনকোডিংয়ের অন্তর্নিহিতা নির্ধারণ করতে কার্যকর, যা বেশিরভাগ ব্যবহারের ক্ষেত্রে প্রয়োজন হয় না।

এছাড়াও, বিওএম সেই গ্রাহকদের জন্য অপ্রয়োজনীয় গোলমাল / বেদনা হতে পারে যা এটি সম্পর্কে জানেন না বা তাদের যত্ন নেই এবং ব্যবহারকারীর বিভ্রান্তির কারণ হতে পারে।


2
"এটি ইউটিএফ -8 এর কোনও উপকার নেই কারণ এটি যাইহোক গ্লিফ প্রতি 8-বিট হয়" " এর ... না, কেবলমাত্র ASCII-7 গ্লিফগুলি ইউটিএফ -8 এ 8-বিট রয়েছে। এর বাইরে যে কোনও কিছু 16, 24 বা 32 বিট হতে চলেছে।
পাওয়ারলর্ড

3
"বিওএমটি সাধারণত এনকোডিংয়ের অন্তর্নিহিতা নির্ধারণে দরকারী, যা বেশিরভাগ ব্যবহারের ক্ষেত্রে প্রয়োজন হয় না ..." ... ব্যবহারের ক্ষেত্রে নির্বিশেষে শেষ পর্যন্ত ইউটিএফ -8 এ প্রযোজ্য নয়
জোয়েলফ্যান

6

আমি এটিকে অন্য দৃষ্টিকোণ থেকে দেখছি। আমি মনে করি বিওএম সহ ইউটিএফ -8 আরও ভাল কারণ এটি ফাইল সম্পর্কে আরও তথ্য সরবরাহ করে। আমি বিএমএম ছাড়াই ইউটিএফ -8 ব্যবহার করি কেবল যদি আমার সমস্যার মুখোমুখি হয়।

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

মনে রাখবেন যে আপনি যখন ইউটিএফ -8 এনকোডিং সহ একটি নতুন তৈরি ফাইল সংরক্ষণ করার চেষ্টা করবেন তখন উইন্ডোজটির ক্লাসিক নোটপ্যাড স্বয়ংক্রিয়ভাবে একটি বিওএম-এর সাথে ফাইলগুলি সংরক্ষণ করে।

আমি ব্যক্তিগতভাবে বিওএম ছাড়াই বিওএম এবং .html ফাইলগুলির সাথে সার্ভারের সাইড স্ক্রিপ্টিং ফাইলগুলি (.asp, .ini, .aspx) সংরক্ষণ করি ।


4
উইন্ডোজ ক্লাসিক নোটপ্যাড সম্পর্কে দুর্দান্ত টিপ জন্য ধন্যবাদ। আমি ঠিক একই জিনিসটি খুঁজে পেতে ইতিমধ্যে কিছু সময় ব্যয় করেছি। আমার ফলাফলটি সর্বদা উইন্ডোজ ক্লাসিক নোটপ্যাডের পরিবর্তে নোটপ্যাড ++ ব্যবহার করা ছিল। :-)
বারফুইন

আপনি আরও ভাল ম্যাডিটিট ব্যবহার করুন। এটিই একমাত্র সম্পাদক যে - হেক্স মোডে - আপনি যদি বাইট এবং চরিত্রের মধ্যে 1: 1 ভিত্তির পরিবর্তে utf-8 বাইট অনুক্রমটি নির্বাচন করেন তবে একটি অক্ষর দেখায়। কোনও ইউটিএফ -8 ফাইল সম্পর্কে সচেতন এমন একটি হেক্স-সম্পাদককে ম্যাডেডিটের মতো বেড়াতে হবে!
উজ্জ্বল

@ উজ্জ্বল আমি মনে করি না যে বিওএমের স্বার্থে আপনার একের প্রয়োজন need এটি কোনও বিষয় নয়, একটি utf-8 BOM ইফবিবিবিএফ বা fffe (ভুল পড়লে fffe এর) চিনতে খুব বেশি লাগে না। যে কোনওটি কেবল সেই বাইটগুলি মুছতে পারে। যদিও বাকী ফাইলটির জন্য ম্যাপিং করা খারাপ নয়, তবে বাইট
দ্বারাও

@ বারলপ ফাইলটির বিষয়বস্তু utf-8 এনকোড করা থাকলে আপনি কেন একটি utf-8 বিওএম মুছতে চান? বিওএম আধুনিক পাঠ্য দর্শক, পাঠ্য নিয়ন্ত্রণ এবং পাশাপাশি পাঠ্য সম্পাদকরা স্বীকৃত। একটি utf-8 সিকোয়েন্সের এক থেকে এক দৃষ্টিকোণ অর্থবোধ করে না, যেহেতু n বাইটগুলির ফলে একটি চরিত্রের ফলাফল হয়। অবশ্যই কোনও পাঠ্য-সম্পাদক বা হেক্স-সম্পাদককে কোনও বাইট মুছে ফেলার অনুমতি দেওয়া উচিত তবে এটি অবৈধ utf-8 সিকোয়েন্সগুলিতে নিয়ে যেতে পারে।
উজ্জ্বল

বোম্বযুক্ত @ ব্রাইটিয়াল ইউটিএফ -8 হ'ল একটি এনকোডিং এবং বোম ছাড়াই utf-8 একটি এনকোডিং। সিএমডি প্রম্পটটি বোম ছাড়াই utf8 ব্যবহার করে .. সুতরাং আপনার যদি একটি utf8 ফাইল থাকে তবে আপনি chcp 65001utf8 সমর্থনের জন্য কমান্ডটি চালান , এটি বোম ছাড়াই utf8। আপনি যদি type myfileএটি করেন তবে বোমা না থাকলে কেবল এটি সঠিকভাবে প্রদর্শিত হবে। যদি আপনি আ ফাইল ফাইল করতে অক্ষরগুলি আউটপুট করেন echo aaa>a.aবা echo אאא>a.aআপনার কাছে chcp 65001 থাকে তবে এটি কোনও বিওএম ছাড়াই আউটপুট দেয়।
বার্লোপ

6

আপনি যখন ইউটিএফ -8 এ এনকোডড তথ্য প্রদর্শন করতে চান তখন আপনি সমস্যার মুখোমুখি হতে পারেন না। উদাহরণস্বরূপ ইউটিএফ -8 হিসাবে একটি এইচটিএমএল দস্তাবেজটি ঘোষণা করুন এবং আপনার ব্রাউজারে ডকুমেন্টের শরীরে থাকা সমস্ত কিছুই থাকবে will

উইন্ডোজ বা লিনাক্সে যখন আমাদের কাছে পাঠ্য, সিএসভি এবং এক্সএমএল ফাইল থাকে তখন এটি হয় না।

উদাহরণস্বরূপ, উইন্ডোজ বা লিনাক্সের একটি পাঠ্য ফাইল, কল্পনাযোগ্য সহজতমগুলির মধ্যে একটি, এটি (সাধারণত) ইউটিএফ -8 নয় is

এটি এক্সএমএল হিসাবে সংরক্ষণ করুন এবং এটি ইউটিএফ -8 হিসাবে ঘোষণা করুন:

<?xml version="1.0" encoding="UTF-8"?>

এটি ইউটিএফ -8 হিসাবে ঘোষিত হলেও, এটি সঠিকভাবে প্রদর্শিত হবে না (এটি পড়া হবে না)।

আমার কাছে ফরাসি অক্ষরযুক্ত ডেটার একটি স্ট্রিং ছিল, এটি সিন্ডিকেশনের জন্য এক্সএমএল হিসাবে সংরক্ষণ করা দরকার। প্রথম থেকেই কোনও ইউটিএফ -8 ফাইল তৈরি না করে (আইডিইতে বিকল্পগুলি পরিবর্তন করা এবং "নতুন ফাইল তৈরি করুন") বা ফাইলটির শুরুতে বিওএম যোগ না করা

$file="\xEF\xBB\xBF".$string;

আমি এক্সএমএল ফাইলে ফরাসী অক্ষরগুলি সংরক্ষণ করতে সক্ষম হইনি।


1
এক্সটিএমএল এফটিএম, আমি মনে করি আপনার ফাইলটি ASCII হিসাবে রাখা উচিত এবং পরিবর্তে সত্তা ব্যবহার করা উচিত।
অ্যালোস মাহডাল

4
আমি জানি এটি একটি পুরানো উত্তর, তবে আমি কেবল এটি উল্লেখ করতে চাই যে এটি ভুল। লিনাক্সের পাঠ্য ফাইলগুলি (অন্যান্য ইউনিক্সের জন্য কথা বলতে পারে না) সাধারণত / হয় / ইউটিএফ -8।
Functino

6

একটি ব্যবহারিক পার্থক্য হ'ল আপনি যদি ম্যাক ওএস এক্সের জন্য একটি শেল স্ক্রিপ্ট লিখেন এবং এটি সরল ইউটিএফ -8 হিসাবে সংরক্ষণ করেন তবে আপনি প্রতিক্রিয়া পাবেন:

#!/bin/bash: No such file or directory

আপনি কোন শেলটি ব্যবহার করতে চান তা উল্লেখ করে শেবাং লাইনের প্রতিক্রিয়া:

#!/bin/bash

আপনি যদি ইউটিএফ -8 হিসাবে সংরক্ষণ করেন তবে কোনও বিওএম ( বিবিএডিতে বলুন ) সব ঠিক থাকবে না।


8
এটি কারণ মাইক্রোসফ্ট স্ট্যান্ডার্ড যা বলে তার অর্থ অদলবদল করে। ইউটিএফ -8 এর কোনও বিওএম নেই: তারা মাইক্রোসফ্ট ইউটিএফ -8 তৈরি করেছে যা ডেটা স্ট্রিমের সামনে একটি উত্সাহী বিওএম inোকায় এবং তারপরে আপনাকে বলেছিল যে না, এটি আসলে ইউটিএফ -8। এইটা না. এটি কেবল প্রসারিত এবং দূষিত হয়।
tchrist

4

উপরে উল্লিখিত হিসাবে, বিওএম সহ ইউটিএফ -8 নন-বিওএম-সচেতন (বা সামঞ্জস্যপূর্ণ) সফ্টওয়্যার নিয়ে সমস্যা সৃষ্টি করতে পারে। আমি একবার মোজিলা-ভিত্তিক কমপোজারের সাথে ইউটিএফ -8 + বিওএম হিসাবে এনকোডযুক্ত এইচটিএমএল ফাইলগুলি সম্পাদনা করেছি , ক্লায়েন্ট হিসাবে যে ডাব্লুওয়াইএসআইওয়াইজি প্রোগ্রাম প্রয়োজন ।

সংরক্ষণ করার সময় লেআউটটি সর্বদা ধ্বংস হয়ে যায়। এটি প্রায় আমার পথ কমাতে আমার কিছুটা সময় নিয়েছে। এই ফাইলগুলি ফায়ারফক্সে ভাল কাজ করেছে, কিন্তু ইন্টারনেট এক্সপ্লোরারে একটি সিএসএস কৌতুক দেখিয়েছে, লেআউটটি আবার ধ্বংস করেছে। ঘন্টার জন্য লিঙ্কযুক্ত সিএসএস ফাইলগুলির সাথে কোনও লাভ না করার পরে আমি আবিষ্কার করেছি যে ইন্টারনেট এক্সপ্লোরার বিএমএফড এইচটিএমএল ফাইল পছন্দ করে না। কখনও না.

এছাড়াও, আমি সবেমাত্র এটি উইকিপিডিয়ায় পেয়েছি:

শেবাং অক্ষরগুলি ইউটিএফ -8 সহ বর্ধিত এএসসিআইআই এনকোডিংগুলিতে একই দুটি বাইট দ্বারা উপস্থাপিত হয়, যা বর্তমান ইউনিক্স-মতো সিস্টেমে স্ক্রিপ্ট এবং অন্যান্য পাঠ্য ফাইলগুলির জন্য সাধারণত ব্যবহৃত হয়। তবে, ইউটিএফ -8 ফাইলগুলি alচ্ছিক বাইট অর্ডার চিহ্ন (বিওএম) দিয়ে শুরু হতে পারে; যদি "এক্সিকিউটিভ" ফাংশনটি নির্দিষ্টভাবে বাইট 0x23 0x21 সনাক্ত করে, তবে শেবাংয়ের আগে বিওএম (0xEF 0xBB 0xBF) এর উপস্থিতি স্ক্রিপ্ট দোভাষীকে মৃত্যুদন্ড কার্যকর করতে বাধা দেবে। কিছু কর্তৃপক্ষ POSIX (ইউনিক্সের মতো) স্ক্রিপ্টগুলিতে বাইট অর্ডার চিহ্ন ব্যবহার করার বিরুদ্ধে পরামর্শ দেয়, [15] এই কারণে এবং আরও বৃহত্তর আন্তঃব্যবহারযোগ্যতা এবং দার্শনিক উদ্বেগের জন্য


4

ইউনিকোড বাইট অর্ডার মার্ক (বিওএম) এফএকিউ একটি সংক্ষিপ্ত উত্তর সরবরাহ করে:

প্রশ্ন: বিএমএস নিয়ে আমার কীভাবে আচরণ করা উচিত?

উত্তর: অনুসরণ করার জন্য এখানে কিছু গাইডলাইন রয়েছে:

  1. একটি নির্দিষ্ট প্রোটোকল (যেমন। টেক্সট ফাইলগুলির জন্য মাইক্রোসফ্ট কনভেনশন) ফাইলের মতো কিছু ইউনিকোড ডেটা স্ট্রিমগুলিতে বিওএম ব্যবহারের প্রয়োজন হতে পারে। আপনার যখন এই জাতীয় প্রোটোকলের সাথে সামঞ্জস্য করা দরকার তখন একটি বিওএম ব্যবহার করুন।

  2. কিছু প্রোটোকল অবিকৃত পাঠ্যের ক্ষেত্রে Bচ্ছিক বিওএমগুলিকে অনুমতি দেয়। এই ক্ষেত্রে,

    • যেখানে একটি পাঠ্য ডেটা স্ট্রিমটি সরল পাঠ্য হিসাবে পরিচিত, তবে অজানা এনকোডিংয়ের ক্ষেত্রে, বিওএম স্বাক্ষর হিসাবে ব্যবহার করা যেতে পারে। যদি বিওএম না থাকে তবে এনকোডিং কিছু হতে পারে।

    • যেখানে কোনও পাঠ্য ডেটা স্ট্রিম প্লেইন ইউনিকোড পাঠ্য হিসাবে পরিচিত (তবে কোন এন্ডিয়ান নয়) তবে বিওএম স্বাক্ষর হিসাবে ব্যবহার করা যেতে পারে। যদি বিওএম না থাকে তবে পাঠ্যটি বড়-এন্ডিয়ান হিসাবে ব্যাখ্যা করা উচিত।

  3. কিছু বাইট ভিত্তিক প্রোটোকল একটি ফাইলের শুরুতে ASCII অক্ষর আশা করে। যদি এই প্রোটোকলগুলির সাথে ইউটিএফ -8 ব্যবহার করা হয় তবে এনওডিং ফর্ম স্বাক্ষর হিসাবে বিওএম ব্যবহার করা এড়ানো উচিত।

  4. যেখানে ডেটা স্ট্রিমের সুনির্দিষ্ট প্রকারটি জানা যায় (যেমন ইউনিকোড বিগ-এডিয়ান বা ইউনিকোড লিটল-এন্ডিয়ান), বিওএম ব্যবহার করা উচিত নয়। বিশেষত, যখনই কোনও ডেটা স্ট্রিমটিকে ইউটিএফ -16 বিই হিসাবে ঘোষণা করা হয়, ইউটিএফ-16 এলই, ইউটিএফ -32 বিই বা ইউটিএফ -32 এলই কোনও বিওএম ব্যবহার করা উচিত নয়।


1

Http://en.wikedia.org/wiki/Byte-order_mark থেকে :

বাইট অর্ডার চিহ্ন (বিওএম) হ'ল একটি ইউনিকোড অক্ষর যা কোনও পাঠ্য ফাইল বা প্রবাহের এন্ডিয়নেস (বাইট ক্রম) সিগন্যাল করতে ব্যবহৃত হয়। এটির কোড পয়েন্ট হ'ল ইউ + এফএফএফ। বিওএম ব্যবহার alচ্ছিক এবং যদি ব্যবহৃত হয় তবে পাঠ্য প্রবাহের শুরুতে উপস্থিত হওয়া উচিত। বাইট-অর্ডার নির্দেশক হিসাবে এর নির্দিষ্ট ব্যবহারের বাইরে, বিওএম অক্ষরটিও ইউনিকোডের বিভিন্ন উপস্থাপনাগুলির মধ্যে কোনটি পাঠ্যটি এনকোড করা হয়েছে তাও নির্দেশ করতে পারে।

আপনার ফাইলে সর্বদা একটি বিওএম ব্যবহার করা নিশ্চিত করে যে এটি সর্বদা সঠিকভাবে একটি সম্পাদকের মধ্যে খোলে যা ইউটিএফ -8 এবং বিওএম সমর্থন করে।

বিওএম এর অনুপস্থিতিতে আমার আসল সমস্যাটি নীচে রয়েছে। মনে করুন আমাদের কাছে একটি ফাইল রয়েছে যা এতে রয়েছে:

abc

বিওএম ছাড়াই এটি বেশিরভাগ সম্পাদকগুলিতে এএনএসআই হিসাবে খোলে। সুতরাং এই ফাইলটির অন্য একজন ব্যবহারকারী এটি খুলবে এবং কিছু নেটিভ অক্ষর যুক্ত করে, উদাহরণস্বরূপ:

abg-αβγ

ওহো ... এখন ফাইলটি এখনও এএনএসআইতে রয়েছে এবং অনুমান করুন যে, "αβγ" 6 বাইট দখল করে না, তবে 3. এটি ইউটিএফ -8 নয় এবং এটি পরবর্তী সময়ে বিকাশ শৃঙ্খলে অন্যান্য সমস্যা সৃষ্টি করে।


9
বিএমও-সচেতন সফ্টওয়্যারটির প্রারম্ভিক সময়ে স্পুরিয়াস বাইটস উপস্থিত হওয়ার বিষয়টি নিশ্চিত করুন। হ্যাঁ.
রোমেন

1
@ রোমাইন মুলার: যেমন আপনি বিওএম-র পরে হেডার পাঠানোর চেষ্টা করবেন তখন পিএইচপি 5 "অসম্ভব" ত্রুটি ফেলে দেবে throw
পিসকোভর

5
as ascii নয়, তবে 8 বিট-এসসিআই-বেসড এনকোডিংগুলিতে উপস্থিত হতে পারে। একটি বিওএম এর ব্যবহার ইউটিএফ -8 এর বিএনটিফিকে অক্ষম করে, এর এসসিআইয়ের সাথে তার সামঞ্জস্যতা (খাঁটি অ্যাস্কিআই ব্যবহৃত হয় এমন লেগ্যাসি অ্যাপ্লিকেশনগুলির সাথে কাজ করার ক্ষমতা)।
ctrl-alt-delor 13

1
এটি ভুল উত্তর। এর সামনে একটি বিওএম সহ একটি স্ট্রিং পুরোপুরি অন্য কিছু। এটি সেখানে থাকার কথা নয় এবং কেবল সমস্ত কিছু স্ক্রু করে।
tchrist

বিওএম ছাড়া এটি বেশিরভাগ সম্পাদকগুলিতে এএনএসআই হিসাবে খোলে। আমি একেবারে একমত। যদি এটি ঘটে তবে আপনি ভাগ্যবান যদি আপনি সঠিক কোডপেজ নিয়ে কাজ করেন তবে প্রকৃতপক্ষে এটি কেবল অনুমান, কারণ কোডেপ ফাইলটির অংশ নয়। একটি বিওএম হ'ল।
উজ্জ্বল

1

ভিজ্যুয়াল স্টুডিও, সোর্সট্রি এবং বিটবকেট পুলের অনুরোধগুলির সাথে আমার অভিজ্ঞতা এখানে রয়েছে যা আমাকে কিছু সমস্যা দিচ্ছে:

সুতরাং এটি একটি বিলি অনুরোধ পর্যালোচনা করার সময় স্বাক্ষরযুক্ত বিওএম প্রতিটি ফাইলের মধ্যে একটি লাল বিন্দু অক্ষর অন্তর্ভুক্ত করবে (এটি বেশ বিরক্তিকর হতে পারে)।

এখানে চিত্র বিবরণ লিখুন

আপনি যদি এটিকে ঘুরে দেখেন তবে এটি "উফেফ" এর মতো একটি চরিত্র দেখাবে, তবে এটি প্রমাণিত হয়েছে সোর্সট্রি এই ধরণের বাইটমার্কগুলি প্রদর্শন করে না, সুতরাং এটি সম্ভবত আপনার টানার অনুরোধগুলিতে শেষ হবে, যা ঠিক হওয়া উচিত কারণ ভিজ্যুয়াল স্টুডিও এইভাবেই 2017 এখন নতুন ফাইল এনকোড করে, তাই সম্ভবত বিটবাকেট এটিকে উপেক্ষা করা উচিত বা এটিকে অন্য উপায়ে প্রদর্শন করা উচিত, আরও তথ্য এখানে:

লাল বিন্দু চিহ্নিতকারী বিটবাকেট পৃথক দর্শন


-4

আপনি যদি HTML ফাইলগুলিতে ইউটিএফ -8 ব্যবহার করেন এবং আপনি যদি সার্বিয়ান সিরিলিক, সার্বীয় লাতিন, জার্মান, হাঙ্গেরিয়ান বা একই পৃষ্ঠায় কিছু বিদেশী ভাষা ব্যবহার করেন তবে একটি বিওএম সহ ইউটিএফ আরও ভাল।

এটি আমার মতামত (কম্পিউটার এবং আইটি শিল্পের 30 বছর)।


1
আমি এটিও সত্য বলে মনে করি। আপনি যদি প্রথম 255 এএসসিআইআই সেটারের বাইরে অক্ষর ব্যবহার করেন এবং আপনি বিওএম বাদ দেন, ব্রাউজারগুলি এটিকে আইএসও -8859-1 হিসাবে ব্যাখ্যা করে এবং আপনি গলার স্বরযুক্ত অক্ষর পান। উপরের উত্তরগুলি দেওয়া, ব্রাউজার-বিক্রেতারা যখন কোনও বিওএম সনাক্ত না করে তখন তারা ভুল কাজ করে। তবে আপনি যদি মাইক্রোসফ্ট এজ / মজিলা / ওয়েবকিট / ব্লিঙ্কে কাজ না করেন তবে এই অ্যাপ্লিকেশনগুলির যে ত্রুটি রয়েছে সেগুলি নিয়ে কাজ করা ছাড়া আপনার কোনও বিকল্প নেই।
asontu

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