একটি ইউনিকোড সেন্ডিনেল মান আমি ব্যবহার করতে পারি?


14

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

উপরের 0x7Fযে কোনও কোডপয়েন্ট অবৈধ ইউএস-এএসসিআইআই, তাই এটি সহজ। তবে ইউনিকোডের জন্য এটি সম্পূর্ণ ভিন্ন গল্প। এছাড়াও বৈধ ইউনিকোড অক্ষর থেকে আছে ব্যক্তিগত ব্যবহারযোগ্য অক্ষর , noncharacters এবং সেন্টিনেল , আমি খুঁজে পাওয়া ইউনিকোড বক্তিগত- ব্যবহার অক্ষর, Noncharacters & সেন্টিনেল প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী

আমি ফাইলের শুরুতে বাইটের প্রেরণিক ক্রম কী হতে পারি যার ফলে অবৈধ ইউএস-এএসসিআইআই, ইউটিএফ -8, ইউটিএফ -16 এলই এবং ইউটিএফ -16 বিই হবে?

  • স্পষ্টতই প্রথম বাইটের নীচের কোনও মান থাকতে পারে না 0x80এটি বৈধ ইউএস-এএসসিআইআই (নিয়ন্ত্রণ) অক্ষর হবে, তাই 0x00এটি ব্যবহার করা যাবে না।
  • এছাড়াও, যেহেতু ব্যক্তিগত-ব্যবহারের অক্ষরগুলি বৈধ ইউনিকোড অক্ষর, তাই আমি এই কোড কোডটিও ব্যবহার করতে পারি না can't
  • যেহেতু এটি অবশ্যই ছোট-এন্ডিয়ান এবং বিগ-এন্ডিয়ান ইউটিএফ -16 উভয়ের সাথেই কাজ করবে, সুতরাং একটি ননচার্যাক্টর যেমন 0xFFFEএটি সম্ভবও নয় কারণ এর বিপরীতটি 0xFEFFবৈধ ইউনিকোড চরিত্র।
  • উপরে উল্লিখিত প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী ননচ্যাকার্টরগুলির মধ্যে কোনওটি ব্যবহার না করার পরামর্শ দেয় কারণ এর ফলে এখনও একটি বৈধ ইউনিকোড সিকোয়েন্স হবে, সুতরাং এর মতো কিছু 0xFFFFচিত্রের বাইরেও রয়েছে।

ভবিষ্যতের প্রুফ প্রেরিত সেন্ডিনেল মানগুলি কীভাবে আমার ব্যবহারের জন্য রেখে যায়?


1 ) পিএনজি ফর্ম্যাটটিতে তার প্রথম বাইট হিসাবে নন-এএসসিআইআই 0x89মান রয়েছে, তারপরে স্ট্রিংটি আসে PNG। কোনও সরঞ্জাম যা পিএনজির প্রথম কয়েকটি বাইট পড়েছে তা নির্ধারণ করতে পারে যে এটি একটি বাইনারি ফাইল কারণ এটি ব্যাখ্যা করতে পারে না 0x89। অন্যদিকে, একটি জিআইএফ ফাইলটি বৈধ এবং পঠনযোগ্য ASCII স্ট্রিংয়ের GIFপরে আরও তিনটি বৈধ ASCII অক্ষর দ্বারা শুরু হয়। জিআইএফ-এর জন্য কোনও সরঞ্জাম নির্ধারণ করতে পারে এটি পাঠযোগ্য পাঠ্য ফাইল। এটি ভুল এবং অ-টেক্সরাল বাইট ক্রম দিয়ে ফাইলটি শুরু করার ধারণাটি অ্যান্ডি ম্যাকফ্যাডেনের ফাইল ফর্ম্যাটগুলি ডিজাইনের মাধ্যমে এসেছে from


3
Since it is a binary format, the first bytes of the file should not form valid textual characters- আপনার যাদু ফাইলটি (/ usr / share / ম্যাজিক, বা / ইত্যাদি / অনেকগুলি ইউনিক্স সিস্টেমে ম্যাজিক) দেখতে হবে যা দেখায় যে এই অ্যাপ্লিকেশনটি ফাইলের প্রকারগুলি সনাক্ত করে। একটি পিএনজি ফাইল শুরু হয় \x89PNG\x0d\0a\x1a\x0a- সেখানে "পিএনজি" নোট করুন, এটি একটি কাঁচা স্ট্রিং। ক্রমগুলি \x89এবং অন্যান্যগুলি প্রিন্টযোগ্য বাইটগুলি tes

@ মিশেলটি হ্যাঁ, যেহেতু পিএনজি একটি বাইনারি ফর্ম্যাট, তাই প্রথম বাইটটি বৈধ পাঠ্য অক্ষর তৈরি করে না। যে আমি বোঝানো কি. আমি আপনার পয়েন্ট দেখতে ব্যর্থ?
ড্যানিয়েল এএ পেলসেমেকার

7
এটি একটি উদাহরণ ছিল। একটি .gif শুরু হয় GIF8। একটি এসজিআই মুভি ফাইল শুরু হয় MOVI। জিপ সংরক্ষণাগার ফাইলের একটি স্টাইল শুরু হয় ZZ, আরও জনপ্রিয় পিকজিপ ফর্ম্যাট শুরু হয় PK। প্রথম বাইটটি একটি অবৈধ পাঠ্য অক্ষর হওয়ার সীমাবদ্ধতা বন্যের মধ্যে যা পাওয়া যায় তার সাথে মিলছে বলে মনে হয় না। আমি কেন আগ্রহী তা কেন এটি প্রয়োজন a

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

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

উত্তর:


16

0xDC 0xDC

  • স্পষ্টতই অবৈধ ইউটিএফ -8 এবং এএসসিআইআই
  • ইউটিএফ -16 এর অন্তর্নিহিততা নির্বিশেষে নেতৃত্বে পেনসহীন ট্রেইল সারোগেট। এটি এর চেয়ে বেশি অবৈধ ইউটিএফ -16 পায় না।

তবে পুরোপুরি যুক্তিযুক্ত আইএসও -8859-1, এবং সম্ভবত অন্য কোনও অক্ষর সেটে যুক্তিসঙ্গত যা 8-বিট এনকোডিং ব্যবহার করে।
পার্সিফাল

4
+1 ওপি আইএসও 8859-1, কেবল মার্কিন-এএসসিআইআই এবং ইউটিএফ- * জিজ্ঞাসা করেনি।
রস প্যাটারসন

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

3
@ পার্সফাল কোনও বাইনারি বৈধ ISO-8859-1 হয় তাই এটি কেবল বিবেচনা করার প্রয়োজন হয় না কারণ এটি অবৈধ আইএসও -8859-1 করা অসম্ভব।
ইসাইলিজা

1
@ পার্সিফল সত্য এবং যদি সেই প্রয়োজন হয় তবে আপনি কেবল ব্যবহার করতে পারেন 0x00বা যা কিছু করতে পারেন, তবে ওপ এটি চায় না।
ইসাইলিজা

5
  • ইউটিএফ -8 এ, বাইটস সি 0, সি 1, এবং এফ 5 - এফএফ অবৈধ। প্রথম বাইটটি হয় হয় ASCII বা বর্ধমান সি 2-এফ 4 এর বাইট হতে হবে, অন্য যে কোনও প্রারম্ভিক বাইটটি ইউটিএফ -8 বৈধ নয়।

  • ইউটিএফ -16 এ, ফাইলটি সাধারণত বাইট অর্ডার চিহ্ন (U + FEFF) দিয়ে শুরু হয়, অন্যথায় অ্যাপ্লিকেশনগুলিকে বাইট ক্রমে অনুমান করতে হবে। D800-DBFF রেঞ্জের কোডপয়েন্টগুলি একটি সারোগেট জুটির জন্য সীসা বাইট হয় এবং DC00-DFFF একটি সারোগেট জুটির পিছনে বাইট হয়।

সুতরাং, আমি বাইট কম্বো ব্যবহার করব F5DC। এই দুটি মান হ'ল:

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

আপনার যদি আরও বিকল্পের প্রয়োজন F5DDহয় তবে F5DFসবার কাছে একই হিসাবে 3 টি বৈশিষ্ট্য রয়েছে, যেমন F6DC- - F6DF, F7DC- F7DFএবং F8DC- F8DFমোট 16 টি বিভিন্ন বাইট কম্বো থেকে নেওয়া।


সুতরাং, ইসাইলিজার ইউ + ডিসিডিসি ব্যবহারের পরামর্শ অনুসারে , 0xDCবৈধ ইউটিএফ -8 হবে?
ড্যানিয়েল এএ পেলসেমেকার

2
@ ভার্টলিংক 0xDCএকটি 2-বাইট অনুক্রমের জন্য একটি ইউটিএফ -8 সীসা বাইট te এটি 10xxxxxxবৈধ হওয়ার জন্য এটি অবশ্যই একটি ধারাবাহিক বাইট অনুসরণ করতে হবে। 0xDCকোনও বৈধ ধারাবাহিকতা বাইট নয়, তাই 0xDC 0xDCবৈধ ইউটিএফ -8 নয়।
ইসাইলিজা

@ ভার্টলিংক: না, কারণ দ্বিতীয় বাইটটি বৈধ নয়, এটি হতে হবে 80- BF
মার্টিজন পিটার্স

2

যদি আপনি "পাঠ্য নয়," চিহ্নিত করতে একটি মুদ্রণযোগ্য অক্ষর ব্যবহার করার চেষ্টা করছেন তবে আপনাকে 0x89 বীট করা কঠিন হবে:

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

সাধারণত, যখন আপনি যাদু সংখ্যা তৈরি করেন, "অ-পাঠ্য" একটি ছোটখাটো পয়েন্ট। আমাকে রেফারেন্সটি সন্ধান করতে হবে, তবে মানক গ্রাফিক্স ফর্ম্যাটগুলির একটির (টিআইএফএফ, আমি মনে করি) এর যাদু নম্বর থেকে দরকারী তথ্য ছয়টি আলাদা টুকরো এর মতো কিছু রয়েছে।

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