web-dev-qa-db-ja.com

TextDecoderのポリフィル

fetch を使用していて、アプリケーションに whatwg-fetch polyfill を含めています。

また、Jake Archibaldのブログで説明されているように TextDecoder を使用します それはとてもフェッチです! 応答をデコードしますが、使用するポリフィルがわかりません。

(現在、SafariはReferenceError: Can't find variable: TextDecoderについて文句を言っています)

TextDecoderのポリフィルがあると思いますが、見つかりません...

9
sfletche

text-encoding ライブラリを使用してこの問題を解決することができました

npm install text-encoding --save

に加えて

import encoding from 'text-encoding';
const decoder = new encoding.TextDecoder();
11
sfletche

迅速なクライアント側テスト(NPMなし)の場合:

<script src="https://unpkg.com/[email protected]/lib/encoding-indexes.js"></script>
<script src="https://unpkg.com/[email protected]/lib/encoding.js"></script>

..そして通常のようにTextDecoderを使用します。 MDNの例:

var win1251decoder = new TextDecoder('windows-1251');
var bytes = new Uint8Array([207, 240, 232, 226, 229, 242, 44, 32, 236, 232, 240, 33]);
console.log(win1251decoder.decode(bytes)); // Привет, мир!
<script src="https://unpkg.com/[email protected]/lib/encoding-indexes.js"></script>
<script src="https://unpkg.com/[email protected]/lib/encoding.js"></script>
7
Sphinxxx

配列をutf8にデコードするだけの場合は、関数を追加するだけで、外部ライブラリは必要ありません。

     function Utf8ArrayToStr(array) {
        var out, i, len, c;
        var char2, char3;

        out = "";
        len = array.length;
        i = 0;
        while(i < len) {
            c = array[i++];
            switch(c >> 4)
            {
                case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
                // 0xxxxxxx
                out += String.fromCharCode(c);
                break;
                case 12: case 13:
                // 110x xxxx   10xx xxxx
                char2 = array[i++];
                out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
                break;
                case 14:
                    // 1110 xxxx  10xx xxxx  10xx xxxx
                    char2 = array[i++];
                    char3 = array[i++];
                    out += String.fromCharCode(((c & 0x0F) << 12) |
                        ((char2 & 0x3F) << 6) |
                        ((char3 & 0x3F) << 0));
                    break;
            }
        }

        return out;
    }
0
Felipe FC