TextEncoder#
TextEncoder.encode()#
Metoda encode()
koduje przekazane dane tekstowe przy użyciu koderTE skojarzonego z danym koderem tekstowym i zwraca obiekt typu Uint8Array
, z którego można odczytać zakodowane bajty.
Opis działania#
Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:
var typed_array = textEncoder.encode([input = ""]);
gdzie poszczególne człony oznaczają:
- typed_array - tablica typowana w postaci obiektu
Uint8Array
, w której umieszczone są zakodowane bajty. - textEncoder - koder tekstowy będący obiektem kontekstu.
- input - łańcuch znakowy reprezentujący dane przeznaczone do zakodowania. Parametr jest opcjonalny z domyślną wartością ustawianą na pusty łańcuch znakowy.
Algorytm wywołania metody encode(input)
nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:
- Przekształć input do strumienia.
- Niech output będzie nowym strumieniem.
Dopóki (while) prawda:
- Niech token będzie wynikiem odczytu z input.
- Niech result będzie wynikiem przetwarzania z przekazaniem token, koderaTE, input oraz output.
Jeśli result jest zakończeniem, to przekształć output do sekwencji bajtów i zwróć obiekt typu
Uint8Array
, który przechowuje obiekt typuArrayBuffer
zawierający output.Kodowanie wspierane przez metodę
encode()
nigdy nie zwraca błędu.
Metoda encode()
nie pobiera drugiego argumentu w postaci obiektu z właściwością stream
, w przeciwieństwie do metody TextDecoder.decode()
, gdyż żaden koder nie wymaga buforowania wartości skalarnych.
Prosty przykład:
<!DOCTYPE html>
<html>
<head>
<script>
function makeEncode(input, variant){
var new_encoder = new TextEncoder();
var info = document.getElementById("info");
if (variant){
var encoded = new_encoder.encode();
}
else{
var encoded = new_encoder.encode(input);
}
var bytes_10 = "";
var bytes_16 = "";
var bufferLen = encoded.length;
for (var i = 0; i < bufferLen; i++){
bytes_10 += encoded[i] + " ";
bytes_16 += encoded[i].toString(16) + " ";
}
info.innerHTML = "Interfejs kodera tekstowego: " + new_encoder
+ "<br>" + "Właściwość encoding: " + new_encoder.encoding
+ "<br><br>" + "Argument z metody encode(): " + input
+ "<br>" + "Obiekt zwracany przez metodę encode(): " + encoded
+ "<br>" + "encoded.length: " + encoded.length
+ "<br>" + "encoded.byteLength: " + encoded.byteLength
+ "<br>" + "encoded.buffer: " + encoded.buffer
+ "<br>" + "encoded.BYTES_PER_ELEMENT: " + encoded.BYTES_PER_ELEMENT
+ "<br>" + "Wszystkie bajty z encoded (dziesiętnie): " + bytes_10
+ "<br>" + "Wszystkie bajty z encoded (hex): " + bytes_16;
}
</script>
</head>
<body>
<p>Kliknij przycisk by zakodować dane tekstowe przy użyciu kodowania UTF-8.</p>
<ul>
<li>
<div>Dane wejściowe bez surogatów:</div>
<input type="button" value="encode()" onclick="makeEncode('', 1)">
<input type="button" value="encode('')" onclick="makeEncode('')">
<input type="button" value="encode(' ')" onclick="makeEncode(' ')">
<input type="button" value="encode('a')" onclick="makeEncode('a')">
<input type="button" value="encode('A')" onclick="makeEncode('A')">
<input type="button" value="encode('ą')" onclick="makeEncode('ą')">
<input type="button" value="encode('źdźbło')" onclick="makeEncode('źdźbło')">
<input type="button" value="encode('\u007F')" onclick="makeEncode('\u007F')">
<input type="button" value="encode('\u0091')" onclick="makeEncode('\u0091')">
<input type="button" value="encode('\u0092')" onclick="makeEncode('\u0092')">
<input type="button" value="encode('\u07FF')" onclick="makeEncode('\u07FF')">
<input type="button" value="encode('\uFFFF')" onclick="makeEncode('\uFFFF')">
<input type="button" value="encode('\u10FFFF')" onclick="makeEncode('\u10FFFF')">
<input type="button" value="encode('\u{10FFFF}')" onclick="makeEncode('\u{10FFFF}')">
</li>
<li>
<div>Dane wejściowe z surogatami(najpierw automatycznie
mapowanymi przez silnik JS na znak zastępczy U+FFFD):</div>
<input type="button" value="encode('\uD800')" onclick="makeEncode('\uD800')">
<input type="button" value="encode('\uDBFF')" onclick="makeEncode('\uDBFF')">
<input type="button" value="encode('\uDC00')" onclick="makeEncode('\uDC00')">
<input type="button" value="encode('\uDFFF')" onclick="makeEncode('\uDFFF')">
</li>
</ul>
<p style="color: blue;">Szczegółowe informacje dla przeprowadzonej operacji kodowania:</p>
<p id="info"></p>
</body>
</html>
Składnia Web IDL#
[Exposed=(Window,Worker)] interface TextEncoder { [NewObject] Uint8Array encode(optional USVString input = ""); };