80

UTF-8 を使用してエンコードされた文字列を含む がありますが、それをJSArrayBufferに変換する標準的な方法が見つかりません(これは UTF-16 を使用してエンコードされていると理解しています)。ArrayBufferString

私はこのコードを多くの場所で見てきましたが、1 バイトより長い UTF-8 コード ポイントでどのように機能するかわかりません。

return String.fromCharCode.apply(null, new Uint8Array(data));

String同様に、 からUTF-8 エンコードされた に変換する標準的な方法が見つかりませんArrayBuffer

4

8 に答える 8

45
function stringToUint(string) {
    var string = btoa(unescape(encodeURIComponent(string))),
        charList = string.split(''),
        uintArray = [];
    for (var i = 0; i < charList.length; i++) {
        uintArray.push(charList[i].charCodeAt(0));
    }
    return new Uint8Array(uintArray);
}

function uintToString(uintArray) {
    var encodedString = String.fromCharCode.apply(null, uintArray),
        decodedString = decodeURIComponent(escape(atob(encodedString)));
    return decodedString;
}

インターネットの助けを借りて、これらの小さな機能を実行しました。これらはあなたの問題を解決するはずです! これが実際のJSFiddleです。

編集

Uint8Array のソースは外部にあり、使用できないためatob、それを削除するだけです(作業フィドル):

function uintToString(uintArray) {
    var encodedString = String.fromCharCode.apply(null, uintArray),
        decodedString = decodeURIComponent(escape(encodedString));
    return decodedString;
}

警告: escape と unescape は Web 標準から削除されました。 これを参照してください。

于 2013-06-19T13:42:53.227 に答える
10

ブラウザでこれを行っている場合、組み込みの文字エンコーディング ライブラリはありませんが、次の方法で対処できます。

function pad(n) {
    return n.length < 2 ? "0" + n : n;
}

var array = new Uint8Array(data);
var str = "";
for( var i = 0, len = array.length; i < len; ++i ) {
    str += ( "%" + pad(array[i].toString(16)))
}

str = decodeURIComponent(str);

3 バイトの UTF-8 ユニットをデコードするデモは次のとおりです: http://jsfiddle.net/Z9pQE/

于 2013-06-19T13:39:45.543 に答える