TextDecoder#

new TextDecoder()#

Interfejs TextDecoder może być wywoływany w roli konstruktora, dzięki czemu pozwala na bezpośrednie tworzenie nowych dekoderów tekstowych wprost z interfejsu.

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 new_decoder = new TextDecoder([label = "utf-8" [, options]]);

gdzie poszczególne człony oznaczają:

Algorytm wywołania konstruktora new TextDecoder(label, options) nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:

  1. Niech encoding będzie wynikiem pobrania kodowania z label.
  2. Jeśli encoding jest niepowodzeniem lub replacement, to zrzuć błąd RangeError.
  3. Niech dec będzie nowym obiektem typu TextDecoder.
  4. Ustaw kodowanieTD w dec na encoding.
  5. Jeśli właściwość fatal w options ma boolowską wartość true, to ustaw tryb błędu TD w dec na "fatal".
  6. Jeśli właściwość ignoreBOM w options ma boolowską wartość true, to ustaw flagę ignorowania BOM w dec.
  7. Zwróć dec.

Obiekt zwracany przez konstruktor new TextDecoder() implementuje interfejs TextDecoder, dlatego ma dostęp do wszystkich poleceń z tego interfejsu (oraz z kolejnych interfejsów w łańcuchu dziedziczenia).

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 createDecoder(label, options, variant){

			var info = document.getElementById("info");
			var passLabel;
			var passOptions;

			try{

				if (variant == 0){

					passLabel = "brak";
					passOptions = "brak";
					var new_decoder = new TextDecoder();

				}

				else if (variant == 1){

					passLabel = label;
					passOptions = "brak";
					var new_decoder = new TextDecoder(label);

				}

				else {

					passLabel = label;
					passOptions = JSON.stringify(options);
					var new_decoder = new TextDecoder(label, options);

				}

				info.innerHTML = "Interfejs dekodera tekstowego: " + new_decoder
						+ "<br>" + "Pierwszy argument z konstruktora (łańcuch): " + passLabel
						+ "<br>" + "Drugi argument z konstruktora (obiekt): " + passOptions
						+ "<br>" + "Właściwość encoding: " + new_decoder.encoding
						+ "<br>" + "Właściwość fatal: " + new_decoder.fatal
						+ "<br>" + "Właściwość ignoreBOM: " + new_decoder.ignoreBOM;

			}

			catch(e){

				info.innerHTML = "Wyjątek: " + e
						+ "<br>" + "Pierwszy argument z konstruktora: " + passLabel
						+ "<br>" + "Drugi argument z konstruktora: " + passOptions;

			}

		}

	</script>

</head>

<body>
	<p>Kliknij przycisk by utworzyć nowy obiekt TextDecoder.</p>
	<ul>
		<li>
			<div>Prawidłowe wartości dla kodowania UTF-8:</div>
			<input type="button" value="new TextDecoder()" onclick="createDecoder('', '', 0)">
			<input type="button" value="new TextDecoder('utf8')" onclick="createDecoder('utf8', '', 1)">
			<input type="button" value="new TextEncoder('UTF8')" onclick="createDecoder('UTF8', '', 1)">
			<input type="button" value="new TextEncoder('utf-8', {})" onclick="createDecoder('utf-8', {}, 2)">
			<input type="button" value="new TextEncoder('UtF-8', {fatal:true})" onclick="createDecoder('UtF-8', {fatal:true}, 2)">
			<input type="button" value="new TextEncoder('unicode-1-1-utf-8', {ignoreBOM:true})" onclick="createDecoder('unicode-1-1-utf-8', {ignoreBOM:true}, 2)">
			<input type="button" value="new TextEncoder('uNiCoDe-1-1-UTF-8', {fatal:false; ignoreBOM:false})" onclick="createDecoder('uNiCoDe-1-1-UTF-8', {fatal:false, ignoreBOM:false}, 2)">
		</li>
		<li>
			<div>Prawidłowe wartości dla kodowania IBM866:</div>
			<input type="button" value="new TextDecoder('866')" onclick="createDecoder('866', '', 1)">
			<input type="button" value="new TextEncoder('cp866')" onclick="createDecoder('cp866', '', 1)">
			<input type="button" value="new TextEncoder('CP866', {})" onclick="createDecoder('CP866', {}, 2)">
			<input type="button" value="new TextEncoder('cSiBm866', {fatal:true})" onclick="createDecoder('cSiBm866', {fatal:true}, 2)">
			<input type="button" value="new TextEncoder('ibm866', {ignoreBOM:true})" onclick="createDecoder('ibm866', {ignoreBOM:true}, 2)">
			<input type="button" value="new TextEncoder('IbM866', {fatal:false; ignoreBOM:false})" onclick="createDecoder('IbM866', {fatal:false, ignoreBOM:false}, 2)">
		</li>
		<li>
			<div>Nieobsługiwane wartości (zrzucony zostanie błąd):</div>
			<input type="button" value="new TextDecoder('')" onclick="createDecoder('', '', 1)">
			<input type="button" value="new TextDecoder('dowolnyTekst')" onclick="createDecoder('dowolnyTekst', '', 1)">
			<input type="button" value="new TextDecoder('csiso2022kr')" onclick="createDecoder('csiso2022kr', '', 1)">
			<input type="button" value="new TextDecoder('iso-2022-cn')" onclick="createDecoder('iso-2022-cn', '', 1)">
			<input type="button" value="new TextDecoder('iso-2022-cn-ext')" onclick="createDecoder('iso-2022-cn-ext', '', 1)">
			<input type="button" value="new TextDecoder('iso-2022-kr')" onclick="createDecoder('iso-2022-kr', '', 1)">
			<input type="button" value="new TextDecoder('utf-8', '')" onclick="createDecoder('iso-2022-kr', '', 2)">
			<input type="button" value="new TextDecoder('utf-8', 666)" onclick="createDecoder('iso-2022-kr', 666, 2)">
		</li>
	</ul>

	<p style="color: blue;">Szczegółowe informacje dla nowego obiektu TextDecoder:</p>
	<p id="info"></p>
</body>

</html>

Kolejny przykład testujący obsługę w wątkach roboczych:

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

	var worker_fn = function(e){

		var new_decoder = new TextDecoder();

		var result = "Interfejs dekodera tekstowego: "  + new_decoder
			+ "<br>" + "Właściwość encoding: " + new_decoder.encoding
			+ "<br>" + "Właściwość fatal: " + new_decoder.fatal
			+ "<br>" + "Właściwość ignoreBOM: " + new_decoder.ignoreBOM;

		self.postMessage(result);

	};

	var blob = new Blob(["onmessage = " + worker_fn.toString()], {type: "text/javascript"});
	var worker = new Worker(window.URL.createObjectURL(blob));

	worker.onmessage = function(e){
		document.write(e.data);
		document.close();
	};

	worker.postMessage("start");

</script>

Składnia Web IDL#

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
[Constructor(optional DOMString label = "utf-8", optional TextDecoderOptions options),
 Exposed=Window,Worker]
interface TextDecoder {
};

Specyfikacje i inne materiały#

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

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