বেস 128 কেন ব্যবহার হয় না? [বন্ধ]


90

ওয়েবে বাইনারি ডেটা প্রেরণে বেস 128 এর পরিবর্তে কেবল বেস 64 কেন ব্যবহার করা হয়? ASCII অক্ষর সেটটিতে 128 টি অক্ষর রয়েছে যা তাত্ত্বিকভাবে 128 বেসকে উপস্থাপন করতে পারে তবে কেবল বেস 64 কিন্তু বেস 128 নয় বেশিরভাগ ক্ষেত্রে ব্যবহৃত হয়।


60
কেন 256 বেস না?
গম্বো

22
আমি মনে করি বিন্দুটি মুদ্রণযোগ্য অক্ষরগুলি রয়েছে (যদিও এখানে
64৪

29
আমি মনে করি বেস 128 কিছুদিন আগে আমাদের হয়ে গেছে। গার্ড বেস to৪ এর জন্য নির্ধারিত দলটি এখনও বাইরে রয়েছে।
রিচ মেল্টন

4
এই প্রশ্নটি জাভাস্ক্রিপ্ট নির্দিষ্ট কেন? এটি ওয়েবে ব্যবহৃত বেশিরভাগ অন্যান্য ভাষার ক্ষেত্রেও সত্য, তাই না?
বেনিডিক্ট ওয়াল্ডভোগেল

4
@ কেনরোকোট: আমি দেখতে পাচ্ছি যে আপনার 15-বিট চর কিছু 3 টি বাইটে এনকোড হবে। আপনার বেস -2048 এনকোডিং মানে 11 টি বিটকে 2 বাইটে প্যাক করা, যা প্রতি বাইটে 5.5 বিট তৈরি করে - বেস -৪৪ এর চেয়ে আধা খানিক কম।
মার্টিনাস

উত্তর:


105

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

অ্যাডোব ASCII অক্ষর সেটটিতে আরও অক্ষর ব্যবহার করতে বেস 85 এনকোডিং তৈরি করেছে , কিন্তু আফাইক এটি পেটেন্ট দ্বারা সুরক্ষিত।


7
বেস 91 একটি ভাল ওপেন সোর্স বিকল্পের মতো বলে মনে হচ্ছে: base91.sourceforge.net
জর্জি

4
এটি বিবেচনা করার মতো যে 2 পাওয়ার একটি শক্তি বাইট ডেটা আরও তাত্ক্ষণিকভাবে ফিট করে এবং এনকোডিং সহজ is তারপরে বহনযোগ্যতা আছে; প্রতিটি ভাষার একটি বেস 64 এনকোড এবং / অথবা একটি বেস 64 ডিকোড থাকে।
লোডেভিজক

4
পুনঃ বেস 85 এবং অ্যাডোব : পেটেন্ট সংখ্যা এবং বছরের মঞ্জুর হলে উত্তরটি আরও কার্যকর করা যায়। পেটেন্টগুলির সমস্যা যদি সর্বদা থাকে তবে এটি সর্বদা btoa1990 সালের তারিখের পেটেন্টগুলির দ্বারা নিরবচ্ছিন্ন, এবং সেগুলি অবশ্যই শেষ হয়ে যাবে।
এজিসি

65

কারণ সেই 128 টি চরিত্রগুলির মধ্যে কিছু অক্ষরহীন (মূলত কোডডপয়েন্ট 0x20 এর নীচে)। সুতরাং, তারা নির্ভরযোগ্যভাবে তারের উপর একটি স্ট্রিং হিসাবে প্রেরণ করা যাবে না। এবং, আপনি কোডপয়েন্ট 128 এর উপরে গেলে আপনার সিস্টেমে বিভিন্ন এনকোডিংয়ের কারণে এনকোডিং সমস্যা থাকতে পারে।


8
Base94 এখানে GitHub বিদ্যমান, এটা সব 94 মুদ্রণযোগ্য ASCII অক্ষর ব্যবহার করে: gist.github.com/iso2022jp/4054241
intrepidis

15

ইতিমধ্যে অন্যান্য উত্তরে যেমন বলা হয়েছে, মূল বিষয়টি মুদ্রণযোগ্যগুলিতে সেট করা অক্ষর হ্রাস করা। আরও কার্যকর এনকোডিং প্রকল্প বেসই 91 হয় কারণ এটি একটি বৃহত্তর অক্ষর সেট ব্যবহার করে এবং তবুও কম ASCII রেঞ্জের নিয়ন্ত্রণ / সাদা স্পেস অক্ষরগুলি এড়িয়ে চলে। ওয়েবপৃষ্ঠায় বাইনারি বনাম বেস 64 বনাম বেস E91 এনকোডিং দক্ষতার একটি দুর্দান্ত তুলনা রয়েছে ।

আমি একবার জাভা বাস্তবায়ন পরিষ্কার। লোকেরা আগ্রহী হলে আমি এটিকে গিটহাবের উপরে চাপ দিতে পারি।

আপডেট : এটি এখন গিটহাবে রয়েছে


আমি জাভা সংস্করণে আগ্রহী হব
মাইকেল ডারিডেফ


12

প্রথম 32 টি অক্ষরের নিয়ন্ত্রণের অক্ষরটির একেবারেই কোনও প্রাসঙ্গিকতা নেই কারণ 128 টি অক্ষর পেতে আপনাকে এগুলি ব্যবহার করতে হবে না। আমাদের চয়ন করতে 256 টি অক্ষর রয়েছে, এবং কেবলমাত্র প্রথম 32 টি নিয়ন্ত্রণ অক্ষর। এটি 192 টি অক্ষর ফেলেছে এবং তাই নিয়ন্ত্রণ অক্ষর ব্যবহার না করেই 128 সম্পূর্ণ সম্ভব।

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

এটাই কারন!


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

7
কেবল যোগ করতে: ASCII কেবল 128 টি অক্ষর সংজ্ঞায়িত করে। অক্ষর # 128 থেকে # 255 ASCII এ সংজ্ঞায়িত করা হয়নি । যেহেতু প্রশ্নটি স্পষ্টভাবে ASCII কে উল্লেখ করে এবং "কোনও 8-বিট এনকোডিং" নয়, সমস্ত উত্তর ASCII সেটের 128 টি অক্ষরের মধ্যে সীমাবদ্ধ করে।
পেপলুয়ান 12'16

সবচেয়ে সাধারণ ইউটিএফ -8 এনকোডিংটিকে উদাহরণ হিসাবে ব্যবহার করা: 128 থেকে 196 এর বাইটগুলি তত্ক্ষণাত ইউটিএফ 8 ডিকোডিংয়ের ত্রুটিগুলির ফলস্বরূপ; 196 থেকে 256 এ বাইটগুলি বোঝায় যে পরবর্তী বাইটটিও একই চরিত্রের, তবে তারপরে যদি পরবর্তী বাইটটি 128 এর নীচে হয় তবে এটি আবার ইউটিএফ 8 ডিকোডিং ত্রুটির ফলস্বরূপ। যাইহোক, প্রায় সমস্ত অক্ষর-এনকোডিং-সংবেদনশীল ভাষাগুলিতে বেস 648 লাইব্রেরিতে বেস 648 স্ট্রিংটিকে ইউটিএফ 8-নিরাপদ স্ট্রিং হিসাবে গ্রহণ করতে হবে। বেস 128 দিয়ে একই করা যায় না কারণ এটি কোনও ইউটিএফ 8-নিরাপদ স্ট্রিং হিসাবে এনকোড করা যায় না।
সফট

10

বেস 64 সাধারণ কারণ এটি বিভিন্ন ধরণের সমস্যা সমাধান করে (আপনি যে জায়গাতেই ভাবতে পারেন প্রায় কাজ করে)

  • পরিবহনটি 8-বিট পরিষ্কার কিনা আপনার উদ্বেগের দরকার নেই।

  • এনকোডিংয়ের সমস্ত অক্ষর মুদ্রণযোগ্য। আপনি তাদের দেখতে পারেন । আপনি এগুলি অনুলিপি এবং পেস্ট করতে পারেন । আপনি এগুলি ইউআরএলগুলিতে (নির্দিষ্ট রূপগুলি) ব্যবহার করতে পারেন। ইত্যাদি

  • স্থির এনকোডিং আকার। আপনি জানেন যে mবাইটস সর্বদা nবাইটগুলিতে এনকোড করতে পারে ।

  • সকলেই এটি শুনেছেন - এটি ব্যাপকভাবে সমর্থিত, প্রচুর লাইব্রেরি, এর মধ্যে আন্তঃক্রিয়াবদ্ধ করা সহজ easy

বেস 128 এর সমস্ত সুবিধা নেই।

দেখে মনে হচ্ছে এটি 8-বিট পরিষ্কার - তবে মনে রাখবেন যে বেস 64 65 টি চিহ্ন ব্যবহার করে। আউট-অফ-ব্যান্ড চরিত্র ছাড়া আপনার কোনও নির্দিষ্ট এনকোডিং আকারের সুবিধা থাকতে পারে না। আপনি যদি ব্যান্ড-অফ-ব্যান্ড চরিত্রটি ব্যবহার করেন তবে আপনি আর 8-বিট পরিষ্কার হতে পারবেন না।

যদিও এটি সব নেতিবাচক নয়।

  • বেস 128 বেস 64 এর চেয়ে এনকোড / ডিকোড করা সহজ - আপনি কেবল শিফট এবং মাস্ক ব্যবহার করেন। এম্বেড থাকা বাস্তবায়নের জন্য গুরুত্বপূর্ণ হতে পারে

  • বেস 128 উপলব্ধ বিটগুলির আরও বেশি ব্যবহার করে বেস 64 এর চেয়ে পরিবহণের সামান্য আরও দক্ষ ব্যবহার করে।

মানুষ কি ব্যবহার base128 - আমি এখন কিছু জন্য এটি ব্যবহার করছি। এটি ঠিক তেমন সাধারণ নয়।


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

"সেই বেস 64 65 টি চিহ্ন ব্যবহার করে।" => টাইপো নাকি আমি কিছু মিস করেছি?
কিকিওয়া

@ কিকিওয়া, উইকিপিডিয়ায় এই জাভা নমুনাটি দেখুন । CODESভেরিয়েবলের দৈর্ঘ্য পরীক্ষা করুন ।
জন লা রুই

ওহ হ্যাঁ, প্যাডিং চরিত্রটি '=' কেবলমাত্র এনকোডিং পেলোডের শেষে, আপনি ঠিক বলেছেন, ধন্যবাদ।
কিকিওয়া

4

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


3

ইসাজি ঠিক বলেছেন। বেস 64 একটি প্রোটোকল যা কেবল পাঠ্য প্রত্যাশা করে ট্রান্সমিশনের জন্য বাইনারি ডেটা এনকোড করতে ব্যবহৃত হয়। উইকির প্রবেশে এটি ঠিক ।


2

বেস 128 পিএইচপি-ক্লাস চেকআউট করুন। আইএসও 8859-1 চরসেটের সাহায্যে এনকোডিং এবং ডিকোডিং।

গুগল কোড পিএইচপি-শ্রেণি বেস 128


4
আমি আশা করি এটি পরিবর্তে utf-8 ব্যবহার করেছে ...
জানুস ট্রয়লসন 20'12

4
অন্তর্নিহিত ডেটার সাথে বেস এনকোডিংয়ের কোনও সম্পর্ক নেই। আপনি নিজের পাঠ্য / ডেটা এনকোড করতে চান এমন কোনও পাঠ্য এনকোডিং ব্যবহার করতে পারেন। তার অর্থ কী বেস ## সূচি টেবিলটি অনুবাদ হিসাবে আইএসও 8859-1 এএসসিআইআই চার্সেট ব্যবহার করে।
চাদ

4
আপনি পাঠ্যে বেস-এনকোডেড বাইনারি ডেটা এম্বেড করার চেষ্টা করার সাথে সাথে অন্তর্নিহিত ডেটার সাথে কিছু করার আছে । যদি সেই পাঠ্যটি অন্য এনকোডিংয়ে এনকোড করা থাকে তবে আপনার সমস্যা হবে।
স্টিজন ডি উইট

"আইএসও 8859-1 এএসসিআইআই" অক্ষর সেট বলে কোনও জিনিস নেই। প্রোগ্রামটি 128 টি বিভিন্ন মুদ্রণযোগ্য আইএসও 8859-1 অক্ষর ব্যবহার করে ডেটা এনকোড করে। এটি কোনও উপায়ে, আকার বা আকারে ASCII ব্যবহার করে না
নিস এনজিস্ট্রমে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.