ইউটিএফ -8 এর উপরে ASCII এনকোডিংটি বেছে নেওয়ার সুবিধা কী?


91

এএসসিআইআই-এর সমস্ত অক্ষরগুলি স্টোরেজ বৃদ্ধি ছাড়াই ইউটিএফ -8 ব্যবহার করে এনকোড করা যায় (উভয়কেই স্টোরেজের বাইট প্রয়োজন)।

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

ইউটিএফ -8 এর পরিবর্তে যখন আমরা ASCII বেছে নেব তখন কোনও ব্যবহারের কেস আছে?


9
উত্তরাধিকারের জিনিসগুলিকে সমর্থন করার জন্য ...
39

9
মানে UTF8 হওয়া হয় legacily খুব হওয়া ASCII সমর্থন করে। সুতরাং যদি আপনাকে লিগ্যাসি স্টাফগুলি সমর্থন করতে হয়, ইউটিএফ 8 অন্য কোনও পরিবর্তন প্রয়োজন না ঠিক ঠিক কাজ করবে।
পেসারিয়ার 14

3
হতে পারে আপনি এমন একটি সিস্টেমের সাথে আন্তঃসংযোগ স্থাপন করতে পেরেছেন যা 8 এসসিআইআই অক্ষরগুলিকে 7 বাইটে প্যাক করে? লোকেরা জিনিসগুলিতে ফিট করার জন্য ক্রেজি স্টাফ করেছিল
ডোনাল ফেলো

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

2
@ebyrob আমার মনে হয় যে ডোনাল ফেলো মানে 8 টি এসকি চিহ্নকে 7 বাইটে বিট প্যাকিং করা উচিত, যেহেতু প্রতিটি প্রতীক 7 টি বিট ব্যবহার করে ... 8 * 7 = 56 বিট = 7 বাইট। এর অর্থ একটি বিশেষ এনকোড এবং ডিকোড ফাংশন হবে, প্রতি 8 টির মধ্যে কেবল 1 বাইট স্টোরেজ সংরক্ষণ করার জন্য
ডডজি_কোডার

উত্তর:


83

কিছু ক্ষেত্রে এটি স্বতন্ত্র অক্ষরগুলির অ্যাক্সেসকে গতিময় করতে পারে। str='ABC'ইউটিএফ 8 এবং এএসসিআইআই-এ স্ট্রিং এনকোড করা কল্পনা করুন (এবং ধারণা করুন যে ভাষা / সংকলক / ডাটাবেস এনকোডিং সম্পর্কে জানে)

Cঅ্যারে-অ্যাক্সেস অপারেটরটি ব্যবহার করে এই স্ট্রিং থেকে তৃতীয় ( ) অক্ষরটি অ্যাক্সেস করতে যা বিভিন্ন প্রোগ্রামিং ভাষায় বৈশিষ্ট্যযুক্ত আপনি যেমন কিছু করতে পারেন c = str[2]

এখন, স্ট্রিংটি যদি ASCII এনকোড করা থাকে তবে আমাদের কেবল স্ট্রিং থেকে তৃতীয় বাইট আনতে হবে।

তবে, স্ট্রিংটি ইউটিএফ -8 এনকোডযুক্ত থাকলে, আমাদের অবশ্যই প্রথমে চেক করতে হবে যে প্রথম অক্ষরটি এক বা দুটি বাইট চর হয় কিনা, তবে আমাদের দ্বিতীয় অক্ষরে একই চেক করা দরকার এবং কেবলমাত্র তখনই আমরা তৃতীয় অক্ষরটি অ্যাক্সেস করতে পারি। পারফরম্যান্সের পার্থক্যটি আরও বড়, স্ট্রিংটি দীর্ঘতর হবে।

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


3
ডাটাবেস যদি "চরিত্রের গণনা" এবং "বাইট গণনা" উভয়ই সংরক্ষণ না করে , তবে আমি বলতে পারি যে এতে কিছু সমস্যা হয়েছে ...
ডিন হার্ডিং

1
টিবিএইচ আমি জানি না এমন কোনও ডাটাবেস যা সঞ্চয় করে রাখবে ...
Mchl

@ এমচএল: আপনি কীভাবে কল্পনা করতে পারেন যে ডাটাবেসটি স্ট্রিংয়ের শেষে পৌঁছেছে?
কেভিন

1
সাধারণত 0x00 বা 0x0000 পৌঁছে দিয়ে
Mchl

4
@ ডিয়ানহার্ডিং কীভাবে চরিত্র গণনা আপনাকে জানায় যে দ্বিতীয় চরিত্রটি কোথায় শুরু হয়? অথবা ডাটাবেসটি প্রতিটি অক্ষরের অফসেটের জন্য একটি সূচক রাখা উচিত? দ্রষ্টব্য: এটা ঠিক 2 অক্ষর নয়, কিন্তু 4 পর্যন্ত (যদি না যখন এটি 6 থাকবে) হতে পারে stackoverflow.com/questions/9533258/... । (আমি মনে করি এটি কেবলমাত্র 16-এর মধ্যে এমন দীর্ঘ ঘৃণ্য বিষয় ছিল যা আপনার সিস্টেমকে ধ্বংস করতে পারে)
ইবিরোব

7

আপনি যদি ইউটিএফ -8 এর কেবলমাত্র ইউএস-এএসসিআইআই (বা আইএসও 646) উপসেট ব্যবহার করতে চলেছেন তবে তার এক বা অন্যটির কোনও আসল সুবিধা নেই; আসলে, সমস্ত কিছুই অভিন্নভাবে এনকোড করা আছে।

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

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


5

এএনএসআই অনেকগুলি জিনিস হতে পারে, বেশিরভাগ ক্ষেত্রে 8 বিট চরিত্র সেট (উইন্ডোজের অধীনে কোড পৃষ্ঠা 1252)।

সম্ভবত আপনি ASCII এর কথা ভাবছিলেন যা 7-বিট এবং ইউটিএফ -8 এর সঠিক উপসেট। অর্থ্যাৎ যে কোনও বৈধ ASCII স্ট্রিমটিও একটি বৈধ UTF-8 স্ট্রিম।

আপনি যদি 8-বিট চরিত্রের সেটগুলির কথা চিন্তা করছিলেন তবে একটি খুব গুরুত্বপূর্ণ সুবিধা হ'ল সমস্ত উপস্থাপনযোগ্য অক্ষরগুলি হ'ল 8-বিট, যেখানে ইউটিএফ -8 এ 24 বিট পর্যন্ত থাকতে পারে।


হ্যাঁ আমি 7-বিট ASCII সেট সম্পর্কে বলছি। আপনি কি 1 টি সুবিধার কথা ভাবতে পারেন আমাদের কখনই ইউটিএফ -8 এর পরিবর্তে এসকিআই হিসাবে কিছু সংরক্ষণ করতে হবে? (যেহেতু 7-বিট 8-বিট হিসাবে সংরক্ষণ করা হবে, ফাইলসাইজ হুবহু একই হবে)
পেসারিয়ার

1
আপনার যদি ইউনিকোড মান 127 এর চেয়ে বড় অক্ষর থাকে তবে সেগুলি ASCII এ সংরক্ষণ করা যায় না।

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

@ তোর কারণেই আমি জিজ্ঞাসা করছি যে ASCII হিসাবে সংরক্ষণের কোনও সুবিধা আছে
কিনা

5
@ পেসারিয়র, আপনি যদি এক্সএমএলকে ASCII হিসাবে সংরক্ষণ করেন তবে আপনার যেমন & # 160; একটি অবিচ্ছেদ্য স্থান জন্য। এটি আরও পূরণ হচ্ছে, তবে আইএসও-ল্যাটিন -১ বনাম ইউটিএফ -8 এনকোডিং ত্রুটির বিরুদ্ধে আপনার ডেটাটিকে আরও প্রতিরোধী করে তোলে। আমাদের অন্তর্নিহিত প্ল্যাটফর্মটি চরিত্রগুলি সহ প্রচুর অদৃশ্য যাদু করে এটি হিসাবে আমরা এটি করি। ASCII এ থাকা আমাদের ডেটা আরও শক্তিশালী করে তোলে।

3

হ্যাঁ, এখনও কিছু ব্যবহারের ঘটনা রয়েছে যেখানে এএসসিআইআই বোঝায়: ফাইল ফর্ম্যাট এবং নেটওয়ার্ক প্রোটোকল । বিশেষত, ব্যবহারের জন্য যেখানে:

  • আপনার কাছে এমন ডেটা রয়েছে যা কম্পিউটার প্রোগ্রামগুলি তৈরি করে এবং সেগুলি গ্রাস করে, শেষ ব্যবহারকারীদের কাছে উপস্থাপিত হয় না;
  • তবে এটি প্রোগ্রামারদের পক্ষে উন্নতি এবং ডিবাগিংয়ের স্বাচ্ছন্দ্যের জন্য পড়তে সক্ষম।

আপনার এনকোডিং হিসাবে ASCII ব্যবহার করে আপনি কমপক্ষে কিছু মানব-পঠনযোগ্যতা ধরে রাখার সময় মাল্টি-বাইট এনকোডিংয়ের জটিলতা এড়াতে পারবেন।

উদাহরণ দুটি:

  • এইচটিটিপি হ'ল অক্টেটের ক্রমগুলির ক্ষেত্রে সংজ্ঞায়িত একটি নেটওয়ার্ক প্রোটোকল, তবে এটি খুব কার্যকর (কমপক্ষে ইংরাজীভাষী প্রোগ্রামারদের ক্ষেত্রে) এটি "জিইটি", "পোস্ট", "স্বীকৃতি-ভাষা" এবং শব্দের ASCII এনকোডিংয়ের সাথে মিলে যায় very শীঘ্রই.
  • PNG চিত্র ফর্ম্যাটে খণ্ড ধরনের চারটি অক্টেট গঠিত, কিন্তু এটা কুশলী আপনি একটি পিএনজি এনকোডার বা ডিকোডার যে প্রোগ্রামিং করছি এর IDAT"ইমেজ তথ্য" অর্থ, এবং PLTE"প্যালেট" অর্থ।

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


ভাল বলেছ. এটি একটি বিদ্রূপাত্মক যে এইচটিটিপি, গ্রহের সবচেয়ে ইউনিকোড প্রেরণকারী প্রোটোকলকে কেবল এএসসিআইআই সমর্থন করা প্রয়োজন। (প্রকৃতপক্ষে, আমি মনে করি এটি টিসিপি এবং আইপি, বাইনারি সমর্থন, এএসসিআইআই সমর্থন ... স্ট্যাকের সেই স্তরে আপনার কেবল প্রয়োজন)
ইবরোব

2

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

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

আপনার যদি ASCII সেটের বাইরে অক্ষরগুলির প্রয়োজন হয় তবে আপনাকে একটি এনকোডিং চয়ন করতে হবে। আপনি এএনএসআই ব্যবহার করতে পারেন, তবে তারপরে আপনি সমস্ত ভিন্ন কোড পৃষ্ঠার সমস্যার মধ্যে চলে যান। মেশিন এ তে একটি ফাইল তৈরি করুন এবং মেশিন বিতে পড়ুন মজার মজাদার পাঠ্য তৈরি করতে পারে / যদি এই মেশিনগুলি বিভিন্ন কোড পৃষ্ঠাগুলি ব্যবহার করার জন্য সেট আপ করা হয়, সহজ কারণ সংখ্যার মান এনএনএন এই কোড পৃষ্ঠাগুলিতে বিভিন্ন বর্ণের প্রতিনিধিত্ব করে।

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

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


যদি আমার 128 টি অক্ষরের বাইরে সমর্থন করার প্রয়োজন না হয় তবে ইউটিএফ 8 এনকোডিংয়ের উপরে এসিএসআইআই এনকোডিং বেছে নেওয়ার সুবিধা কী?
পেসারিয়ার

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

1
@ পেসারিয়র, আপনার যদি 127-র উপরে এনকোডিংয়ের প্রয়োজন না হয়, আপনি যখন এনডিড / ডিকোড করতে কিছু এপিআই ব্যবহার করেন তখন ASCII বেছে নেওয়া উপযুক্ত হতে পারে, কারণ ইউটিএফকে একই অক্ষর হিসাবে অতিরিক্ত বাইট হিসাবে বিবেচনা করার জন্য অতিরিক্ত বিট যাচাইকরণের প্রয়োজন হয়, এটির পরিবর্তে অতিরিক্ত গণনা নেওয়া যেতে পারে খাঁটি এএসসিআইআই যা খালি যাচাইকরণ ছাড়া 8 টি বিট পড়ে। তবে আমি কেবলমাত্র আপনাকে ASCII ব্যবহার করার পরামর্শ দিই যদি আপনার যদি বড় (বড় বড়) গণনায় সত্যিকারের উচ্চ স্তরের অপ্টিমাইজেশন প্রয়োজন হয় এবং আপনি জানেন যে আপনি সেই অপ্টিমাইজেশনে কী করছেন। যদি তা না হয় তবে কেবল ইউটিএফ -8 ব্যবহার করুন।
লুসিয়ো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.