TextDecoder#

TextDecoder.decode()#

Metoda decode() dekoduje przekazane dane binarne przy użyciu kodowaniaTE skojarzonego z danym dekoderem tekstowym i zwraca odpowiadające im dane tekstowe.

Opis działania#

Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
var text = textDecoder.decode([input [, options]]);

gdzie poszczególne człony oznaczają:

Algorytm wywołania metody decode(input, options) nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:

  1. Jeśli flaga braku wyczyszczenia jest nieustawiona, to ustaw dekoderTD na nowy dekoder skojarzony z kodowaniemTD, ustaw strumieńTD na nowy strumień i usuń flagę widzianego BOM.
  2. Jeśli właściwość stream w options ma boolowską wartość true, to ustaw flagę braku wyczyszczenia, w przeciwnym razie usuń flagę braku wyczyszczenia.
  3. Jeśli input został przekazany, to niech kopia input następuje po strumieniuTD.
  4. Niech output będzie nowym strumieniem.
  5. Dopóki (while) prawda:

    1. Niech token będzie wynikiem odczytu ze strumieniaTD.
    2. Jeśli token jest końcem strumienia i flaga braku wyczyszczenia jest ustawiona, to zwróć wynik serializacji strumienia z przekazaniem output.
    3. W przeciwnym razie wykonaj poniższe podkroki:

      1. Niech result będzie wynikiem przetwarzania z przekazaniem token, dekoderaTD, strumieniaTD, output oraz trybu błędu TD.
      2. Jeśli result jest zakończeniem, to zwróć wynik serializacji strumienia z przekazaniem output.
      3. W przeciwnym razie, jeśli result jest błędem, to zrzuć błąd TypeError.
      4. W przeciwnym razie niczego nie rób.

Drugi argument przekazywany do metody decode() umożliwia stopniowe dekodowanie i może być przydatny w sytuacji, kiedy dane wejściowe dla metody (pierwszy argument) napływają porcjami (tj. są strumieniowane).

Prosty przykład:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<!DOCTYPE html>
<html>

<head>

	<script>

		function makeDecode(input, encoding, variant){

			var new_encoder = new TextEncoder();
			var new_decoder = new TextDecoder(encoding);
			var info = document.getElementById("info");

			if (variant){
				var encoded = new_encoder.encode();
				var decode = new_decoder.decode();
			}
			else{
				var encoded = new_encoder.encode(input);
				var decode = new_decoder.decode(encoded);
			}

			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>" + "Argument z konstruktora (łańcuch): " + "utf-8"
					+ "<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

					+ "<br><br><br>" + "Interfejs dekodera tekstowego: " + new_decoder
					+ "<br>" + "Argument z konstruktora (łańcuch): " + encoding
					+ "<br>" + "Właściwość encoding: " + new_decoder.encoding
					+ "<br><br>" + "Argument z metody decode(): " + encoded
					+ "<br>" + "Łańcuch znakowy zwracany przez metodę decode(): " + decode;

		}

	</script>

</head>

<body>
	<p>Kliknij przycisk by zdekodować dane binarne (zakodowane wcześniej przez utf-8) przy użyciu określonego kodowania.</p>
	<ul>
		<li>
			<div>Kodowanie utf-8 (prawidłowy wybór):</div>
			<input type="button" value="decode()" onclick="makeDecode('', 'utf-8', 1)">
			<input type="button" value="decode(encode(''))" onclick="makeDecode('', 'utf-8')">
			<input type="button" value="decode(encode(' '))" onclick="makeDecode(' ', 'utf-8')">
			<input type="button" value="decode(encode('a'))" onclick="makeDecode('a', 'utf-8')">
			<input type="button" value="decode(encode('A'))" onclick="makeDecode('A', 'utf-8')">
			<input type="button" value="decode(encode('ą'))" onclick="makeDecode('ą', 'utf-8')">
			<input type="button" value="decode(encode('źdźbło'))" onclick="makeDecode('źdźbło', 'utf-8')">
			<input type="button" value="decode(encode('\u007F'))" onclick="makeDecode('\u007F', 'utf-8')">
			<input type="button" value="decode(encode('\u07FF'))" onclick="makeDecode('\u07FF', 'utf-8')">
			<input type="button" value="decode(encode('\uFFFF'))" onclick="makeDecode('\uFFFF', 'utf-8')">
			<input type="button" value="decode(encode('\u10FFFF'))" onclick="makeDecode('\u10FFFF', 'utf-8')">
		</li>
		<li>
			<div>Kodowanie utf-16be (nieprawidłowy wybór):</div>
			<input type="button" value="decode()" onclick="makeDecode('', 'utf-16be', 1)">
			<input type="button" value="decode(encode(''))" onclick="makeDecode('', 'utf-16be')">
			<input type="button" value="decode(encode(' '))" onclick="makeDecode(' ', 'utf-16be')">
			<input type="button" value="decode(encode('a'))" onclick="makeDecode('a', 'utf-16be')">
			<input type="button" value="decode(encode('A'))" onclick="makeDecode('A', 'utf-16be')">
			<input type="button" value="decode(encode('ą'))" onclick="makeDecode('ą', 'utf-16be')">
			<input type="button" value="decode(encode('źdźbło'))" onclick="makeDecode('źdźbło', 'utf-16be')">
			<input type="button" value="decode(encode('\u007F'))" onclick="makeDecode('\u007F', 'utf-16be')">
			<input type="button" value="decode(encode('\u07FF'))" onclick="makeDecode('\u07FF', 'utf-16be')">
			<input type="button" value="decode(encode('\uFFFF'))" onclick="makeDecode('\uFFFF', 'utf-16be')">
			<input type="button" value="decode(encode('\u10FFFF'))" onclick="makeDecode('\u10FFFF', 'utf-16be')">
		</li>
		<li>
			<div>Kodowanie utf-16le (nieprawidłowy wybór):</div>
			<input type="button" value="decode()" onclick="makeDecode('', 'utf-16le', 1)">
			<input type="button" value="decode(encode(''))" onclick="makeDecode('', 'utf-16le')">
			<input type="button" value="decode(encode(' '))" onclick="makeDecode(' ', 'utf-16le')">
			<input type="button" value="decode(encode('a'))" onclick="makeDecode('a', 'utf-16le')">
			<input type="button" value="decode(encode('A'))" onclick="makeDecode('A', 'utf-16le')">
			<input type="button" value="decode(encode('ą'))" onclick="makeDecode('ą', 'utf-16le')">
			<input type="button" value="decode(encode('źdźbło'))" onclick="makeDecode('źdźbło', 'utf-16le')">
			<input type="button" value="decode(encode('\u007F'))" onclick="makeDecode('\u007F', 'utf-16le')">
			<input type="button" value="decode(encode('\u07FF'))" onclick="makeDecode('\u07FF', 'utf-16le')">
			<input type="button" value="decode(encode('\uFFFF'))" onclick="makeDecode('\uFFFF', 'utf-16le')">
			<input type="button" value="decode(encode('\u10FFFF'))" onclick="makeDecode('\u10FFFF', 'utf-16le')">
		</li>
	</ul>

	<p style="color: blue;">Szczegółowe informacje dla przeprowadzonej operacji dekodowania:</p>
	<p id="info"></p>
</body>

</html>

Składnia Web IDL#

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
[Exposed=Window,Worker]
interface TextDecoder {
	USVString decode(optional BufferSource input, optional TextDecodeOptions options);
};

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

TextDecoder (H1) TextDecoder.decode() (H2) Opis działania (H3) Składnia Web IDL (H3) Specyfikacje i inne materiały (H3)