1. ホーム
  2. javascript

UTF-8 ArrayBuffer と文字列の変換

2023-08-29 02:27:18

質問

私は ArrayBuffer には UTF-8 でエンコードされた文字列が含まれていますが、 このような文字列を変換する標準的な方法は見当たりません。 ArrayBuffer を JS String に変換します (これは UTF-16 でエンコードされていると理解しています)。

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

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

同じように、私は String から UTF-8 でエンコードされた ArrayBuffer .

どのように解決するのですか?

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 .

EDIT :

Uint8Arrayのソースが外部であるために atob を削除すればいいだけです。 作業用フィドル ):

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

警告: ウェブ標準からエスケープとアンエスケープが削除されました。 こちらをご覧ください。