@ Hgoebl এর উত্তর দ্বারা অনুপ্রাণিত। তার কোডটি ইউটিএফ -16 এর জন্য এবং আমার US-ASCII এর জন্য কিছু দরকার ছিল। সুতরাং এখানে ইউএস-এএসসিআইআই, ইউটিএফ -16, এবং ইউটিএফ -32 coveringেকে আরও একটি সম্পূর্ণ উত্তর দেওয়া আছে।
function stringToAsciiByteArray(str)
{
var bytes = [];
for (var i = 0; i < str.length; ++i)
{
var charCode = str.charCodeAt(i);
if (charCode > 0xFF)
{
throw new Error('Character ' + String.fromCharCode(charCode) + ' can\'t be represented by a US-ASCII byte.');
}
bytes.push(charCode);
}
return bytes;
}
function stringToUtf16ByteArray(str)
{
var bytes = [];
for (var i = 0; i < str.length; ++i)
{
var charCode = str.charCodeAt(i);
bytes.push((charCode & 0xFF00) >>> 8);
bytes.push(charCode & 0xFF);
}
return bytes;
}
function stringToUtf32ByteArray(str)
{
var bytes = [];
for (var i = 0; i < str.length; i+=2)
{
var charPoint = str.codePointAt(i);
bytes.push((charPoint & 0xFF000000) >>> 24);
bytes.push((charPoint & 0xFF0000) >>> 16);
bytes.push((charPoint & 0xFF00) >>> 8);
bytes.push(charPoint & 0xFF);
}
return bytes;
}
UTF-8 পরিবর্তনশীল দৈর্ঘ্য এবং অন্তর্ভুক্ত করা হয়নি কারণ আমাকে নিজেই এনকোডিংটি লিখতে হবে। UTF-8 এবং UTF-16 পরিবর্তনশীল দৈর্ঘ্য। ইউটিএফ -8, ইউটিএফ -16, এবং ইউটিএফ -32 এর নামটি ইঙ্গিত করে ন্যূনতম সংখ্যক বিট রয়েছে। যদি কোনও ইউটিএফ -32 বর্ণের একটি 65 পয়েন্টের কোড পয়েন্ট থাকে তবে তার অর্থ 3 টি শীর্ষস্থানীয় 0 রয়েছে। তবে ইউটিএফ -16 এর জন্য একই কোডটিতে কেবল 1 টি শীর্ষস্থানীয় 0 অন্যদিকে ইউএস-এএসসিআইআই প্রস্থ 8-বিট নির্দিষ্ট করা হয়েছে যার অর্থ এটি সরাসরি বাইটে অনুবাদ করা যেতে পারে।
String.prototype.charCodeAtসর্বাধিক 2 বাইট রিটার্ন দেয় এবং ইউটিএফ -16 এর সাথে হুবহু মিলে যায়। তবে ইউটিএফ -32 এর String.prototype.codePointAtজন্য প্রয়োজনীয় যা ইসমাস্ক্রিপ্ট 6 (হারমোনি) প্রস্তাবনার অংশ। যেহেতু চারকোডএট 2 বাইট রিটার্ন দেয় যা ইউএস-এএসসিআইআই প্রতিনিধিত্ব করতে পারে stringToAsciiByteArrayতার চেয়ে বেশি সম্ভাব্য অক্ষর, ফাংশনটি অক্ষরটিকে অর্ধেকে বিভক্ত করার এবং উভয় বা উভয় বাইটের পরিবর্তে এই জাতীয় ক্ষেত্রে ফেলে দেবে।
মনে রাখবেন যে এই উত্তরটি তুচ্ছ নয় কারণ চরিত্রের এনকোডিংটি তুচ্ছ নয়। আপনি কী ধরণের বাইট অ্যারে চান তা নির্ভর করে কোন অক্ষর এনকোডিং আপনি সেই বাইটগুলি উপস্থাপন করতে চান।
জাভাস্ক্রিপ্টটিতে অভ্যন্তরীণভাবে ইউটিএফ -১ or বা ইউসিএস -২ ব্যবহার করার বিকল্প রয়েছে তবে যেহেতু এটির এমন পদ্ধতি রয়েছে যেগুলি ইউটিএফ -১ 16 এর মতো কাজ করে আমি কোনও ব্রাউজার কেন ইউসিএস -২ ব্যবহার করবে তা আমি দেখতে পাই না। এছাড়াও দেখুন: https://mathiasbynens.be/notes/javascript-encoding
হ্যাঁ আমি জানি প্রশ্নটি 4 বছরের পুরনো তবে আমার নিজের জন্য এই উত্তরটি দরকার ছিল।