@ Hgoebl'ın cevabından esinlenilmiştir. Onun kodu UTF-16 için ve US-ASCII için bir şeye ihtiyacım vardı. İşte US-ASCII, UTF-16 ve UTF-32'yi kapsayan daha eksiksiz bir cevap.
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 değişken uzunluktadır ve kodlamayı kendim yazmam gerektiğinden dahil edilmemiştir. UTF-8 ve UTF-16 değişken uzunluktadır. UTF-8, UTF-16 ve UTF-32, adlarından da anlaşılacağı gibi minimum sayıda bit içerir. Bir UTF-32 karakterinin kod noktası 65 ise, bu, başında 3 0 olduğu anlamına gelir. Ancak UTF-16 için aynı kodda yalnızca 1 önde 0 bulunur. Öte yandan US-ASCII sabit genişlikte 8 bittir, bu da doğrudan baytlara çevrilebileceği anlamına gelir.
String.prototype.charCodeAtmaksimum 2 bayt sayısı döndürür ve UTF-16 ile tam olarak eşleşir. Ancak String.prototype.codePointAt, ECMAScript 6 (Harmony) teklifinin bir parçası olan UTF-32 için gereklidir. CharCodeAt, US-ASCII'nin temsil edebileceğinden daha olası karakter olan 2 bayt döndürdüğünden, işlev stringToAsciiByteArraybu tür durumlarda karakteri ikiye bölmek ve baytlardan birini veya her ikisini birden almak yerine atar.
Karakter kodlaması önemsiz olmadığı için bu cevabın önemsiz olmadığını unutmayın. Ne tür bir bayt dizisi istediğiniz, bu baytların hangi karakter kodlamasını temsil etmesini istediğinize bağlıdır.
javascript, UTF-16 veya UCS-2'yi dahili olarak kullanma seçeneğine sahiptir, ancak UTF-16 gibi davranan yöntemlere sahip olduğundan, herhangi bir tarayıcının neden UCS-2 kullandığını anlamıyorum. Ayrıca bkz .: https://mathiasbynens.be/notes/javascript-encoding
Evet, sorunun 4 yaşında olduğunu biliyorum ama bu cevaba ihtiyacım vardı.