バイナリデータが実際は文字列である場合はどうなりますか? たとえば、テキストデータを含むファイルを受け取ったとします。
組み込みのTextDecoderオブジェクトを使用すると、バッファとエンコーディングを指定して、値を実際のJavaScript文字列に読み取ることができます。
最初に作成する必要があります
let decoder = new TextDecoder([label], [options]);
label
– エンコーディング。デフォルトはutf-8
ですが、big5
、windows-1251
など、他にも多くのエンコーディングがサポートされています。options
– オプションオブジェクトfatal
– ブール値。true
の場合、無効な(デコードできない)文字に対して例外をスローし、それ以外の場合は(デフォルト)、それらを文字\uFFFD
に置き換えます。ignoreBOM
– ブール値。true
の場合、BOM(オプションのバイトオーダーUnicodeマーク)を無視します。めったに必要ありません。
…そしてデコードします
let str = decoder.decode([input], [options]);
input
– デコードするBufferSource
。options
– オプションオブジェクトstream
– ストリームのデコード用(decoder
が受信データのチャンクを繰り返し呼び出される場合)。その場合、マルチバイト文字がチャンク間で分割されることがあります。このオプションは、TextDecoder
に「未完成」の文字を記憶させ、次のチャンクが到着したときにデコードするように指示します。
例えば
let uint8Array = new Uint8Array([72, 101, 108, 108, 111]);
alert( new TextDecoder().decode(uint8Array) ); // Hello
let uint8Array = new Uint8Array([228, 189, 160, 229, 165, 189]);
alert( new TextDecoder().decode(uint8Array) ); // 你好
サブ配列ビューを作成して、バッファの一部をデコードできます
let uint8Array = new Uint8Array([0, 72, 101, 108, 108, 111, 0]);
// the string is in the middle
// create a new view over it, without copying anything
let binaryString = uint8Array.subarray(1, -1);
alert( new TextDecoder().decode(binaryString) ); // Hello
TextEncoder
TextEncoderは逆の処理を行い、文字列をバイトに変換します。
構文は次のとおりです。
let encoder = new TextEncoder();
サポートされているエンコーディングは「utf-8」のみです。
2つのメソッドがあります。
encode(str)
– 文字列からUint8Array
を返します。encodeInto(str, destination)
–str
をUint8Array
でなければならないdestination
にエンコードします。
let encoder = new TextEncoder();
let uint8Array = encoder.encode("Hello");
alert(uint8Array); // 72,101,108,108,111
コメント
<code>
タグを使用し、複数行の場合は<pre>
タグで囲み、10行を超える場合はサンドボックス(plnkr、jsbin、codepen…)を使用してください。