TextEncoder

Cette fonction est expérimentale
Puisque cette fonction est toujours en développement dans certains navigateurs, veuillez consulter le tableau de compatibilité pour les préfixes à utiliser selon les navigateurs.
Il convient de noter qu'une fonctionnalité expérimentale peut voir sa syntaxe ou son comportement modifié dans le futur en fonction des évolutions de la spécification.

TextEncoder prend un flux de points de code en entrée et émet un flux d'octets. Pour une bibliothèque non native plus extensible, voir StringView – une représentation des chaînes de caractères proche de celle de C basée sur les tableaux typés.

Note: Firefox, Chrome et Opera ont pour habitude de supporter les types d'encodage autres que utf-8 (tels que utf-16iso-8859-2, koi8, cp1261, et gbk). À partir de Firefox 48 (bug 1257877), Chrome 54 (ticket) et Opera 41, aucun type d'encodage autre que utf-8 n'est disponible, de manière à être en accord avec la spécification. Dans tous les cas, passer un type d'encodage au constructeur sera ignoré et un TextEncoder utf-8 sera créé (le TextDecoder permet toujours d'autres types pour le décodage).

Note: Il y a une prothèse d'émulation d'implantation pour supporter tous les encodages hérités dans GitHub.

Constructeur

TextEncoder()
Retourne une nouvel objet TextEncoder qui génèrera un flux d'octets encodés en utf-8.

Propriétés

L'interface TextEncoder n'hérite d'aucune propriété.

TextEncoder.encodingLecture seule
DOMString contenant le nom de l'encodeur, qui est une chaîne de caractères décrivant la méthode que l'objet TextEncoder utilisera.

Méthodes

L'interface TextEncoder n'hérite d'aucune propriété.

TextEncoder.encode()
Retourne un Uint8Array conternant un texte encodé en utf-8.

Prothèse d'émulation

La prothèse d'émulation ci-dessous va uniquement répondre aux spécifications données par le W3 (par d'autre type d'encodage que UTF-8 n'est supporté, malheureusement ☹️). Elle est conçue pour fonctionner "clé en main" avec IE5. Toutefois, de IE5 à IE9, elle retournera un tableau normal plutôt qu'un tableau typé. Dans de telles circonstances et avec des navigateurs si lents, cette prothèse (ou tout autre ayant le même objectif) serait inutilisable pour de longues chaînes de caractères avec ces vieux navigateurs. Enfin, notez que vous devriez exécuter le code ci-dessous avec un minifieur (et plus particulièrement un compilateur ) to turn sequences like 0x1e << 3 into 0xf0. These sequences are not already precomputed because they serve to aesthetically illustrate how the polyfill works.

if (typeof TextEncoder === "undefined") {
    TextEncoder=function TextEncoder(){};
    TextEncoder.prototype.encode = function encode(str) {
        "use strict";
        var Len = str.length, resPos = -1;
        // The Uint8Array's length must be at least 3x the length of the string because an invalid UTF-16
        //  takes up the equivelent space of 3 UTF-8 characters to encode it properly. However, Array's
        //  have an auto expanding length and 1.5x should be just the right balance for most uses.
        var resArr = typeof Uint8Array === "undefined" ? new Array(Len * 1.5) : new Uint8Array(Len * 3);
        for (var point=0, nextcode=0, i = 0; i !== Len; ) {
            point = str.charCodeAt(i), i += 1;
            if (point >= 0xD800 && point <= 0xDBFF) {
                if (i === Len) {
                    resArr[resPos += 1] = 0xef/*0b11101111*/; resArr[resPos += 1] = 0xbf/*0b10111111*/;
                    resArr[resPos += 1] = 0xbd/*0b10111101*/; break;
                }
                // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
                nextcode = str.charCodeAt(i);
                if (nextcode >= 0xDC00 && nextcode <= 0xDFFF) {
                    point = (point - 0xD800) * 0x400 + nextcode - 0xDC00 + 0x10000;
                    i += 1;
                    if (point > 0xffff) {
                        resArr[resPos += 1] = (0x1e/*0b11110*/<<3) | (point>>>18);
                        resArr[resPos += 1] = (0x2/*0b10*/<<6) | ((point>>>12)&0x3f/*0b00111111*/);
                        resArr[resPos += 1] = (0x2/*0b10*/<<6) | ((point>>>6)&0x3f/*0b00111111*/);
                        resArr[resPos += 1] = (0x2/*0b10*/<<6) | (point&0x3f/*0b00111111*/);
                        continue;
                    }
                } else {
                    resArr[resPos += 1] = 0xef/*0b11101111*/; resArr[resPos += 1] = 0xbf/*0b10111111*/;
                    resArr[resPos += 1] = 0xbd/*0b10111101*/; continue;
                }
            }
            if (point <= 0x007f) {
                resArr[resPos += 1] = (0x0/*0b0*/<<7) | point;
            } else if (point <= 0x07ff) {
                resArr[resPos += 1] = (0x6/*0b110*/<<5) | (point>>>6);
                resArr[resPos += 1] = (0x2/*0b10*/<<6)  | (point&0x3f/*0b00111111*/);
            } else {
                resArr[resPos += 1] = (0xe/*0b1110*/<<4) | (point>>>12);
                resArr[resPos += 1] = (0x2/*0b10*/<<6)    | ((point>>>6)&0x3f/*0b00111111*/);
                resArr[resPos += 1] = (0x2/*0b10*/<<6)    | (point&0x3f/*0b00111111*/);
            }
        }
        if (typeof Uint8Array !== "undefined") return resArr.subarray(0, resPos + 1);
        // else // IE 6-9
        resArr.length = resPos + 1; // trim off extra weight
        return resArr;
    };
    TextEncoder.prototype.toString = function(){return "[object TextEncoder]"};
    try { // Object.defineProperty only works on DOM prototypes in IE8
        Object.defineProperty(TextEncoder.prototype,"encoding",{
            get:function(){if(TextEncoder.prototype.isPrototypeOf(this)) return"utf-8";
                           else throw TypeError("Illegal invocation");}
        });
    } catch(e) { /*IE6-8 fallback*/ TextEncoder.prototype.encoding = "utf-8"; }
    if(typeof Symbol!=="undefined")TextEncoder.prototype[Symbol.toStringTag]="TextEncoder";
}

Specifications

Specification Status Comment
Encoding
La définition de 'TextEncoder' dans cette spécification.
Standard évolutif Initial definition.

Browser compatibility

Update compatibility data on GitHub
OrdinateurMobile
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidFirefox pour AndroidOpera pour AndroidSafari sur iOSSamsung Internet
TextEncoder
Expérimentale
Chrome Support complet 38Edge Aucun support NonFirefox Support complet 19
Support complet 19
Support complet 18
Notes
Notes Firefox 18 implemented an earlier and slightly different version of the specification.
IE Aucun support NonOpera Support complet 25Safari Support complet 10.1WebView Android Support complet 38Chrome Android Support complet 38Firefox Android Support complet 19
Support complet 19
Support complet 18
Notes
Notes Firefox 18 implemented an earlier and slightly different version of the specification.
Opera Android Support complet OuiSafari iOS Support complet 10.3Samsung Internet Android Support complet Oui
TextEncoder() constructor
Expérimentale
Chrome Support complet 53
Notes
Support complet 53
Notes
Notes Does not accept parameters. Supports only utf-8 encoding.
Aucun support 38 — 53
Notes
Notes Throws RangeError exception for unknown encoding types.
Edge Aucun support NonFirefox Support complet 48
Notes
Support complet 48
Notes
Notes The constructor accepts an encoding type label argument, but the value is ignored. Only utf-8 encoding is supported.
Aucun support 38 — 48
Notes
Notes If the encoding type label argument is invalid, then a RangeError exception is thrown.
Aucun support 19 — 38
Notes
Notes If the encoding type label argument is invalid, then a TypeError exception is thrown.
Support complet 18
Notes
Notes Firefox 18 implemented an earlier and slightly different version of the specification.
IE Aucun support NonOpera Support complet 25Safari Support complet 10.1WebView Android Support complet 38Chrome Android Support complet 38Firefox Android Support complet 48
Notes
Support complet 48
Notes
Notes The constructor accepts an encoding type label argument, but the value is ignored. Only utf-8 encoding is supported.
Aucun support 38 — 48
Notes
Notes If the encoding type label argument is invalid, then a RangeError exception is thrown.
Aucun support 19 — 38
Notes
Notes If the encoding type label argument is invalid, then a TypeError exception is thrown.
Support complet 18
Notes
Notes Firefox 18 implemented an earlier and slightly different version of the specification.
Opera Android ? Safari iOS Support complet 10.3Samsung Internet Android ?
encode
Expérimentale
Chrome Support complet 38Edge Aucun support NonFirefox Support complet 19
Support complet 19
Support complet 18
Notes
Notes Firefox 18 implemented an earlier and slightly different version of the specification.
IE Aucun support NonOpera Support complet 25Safari Support complet 10.1WebView Android Support complet 38Chrome Android Support complet 38Firefox Android Support complet 19
Support complet 19
Support complet 18
Notes
Notes Firefox 18 implemented an earlier and slightly different version of the specification.
Opera Android Support complet OuiSafari iOS Support complet 10.3Samsung Internet Android Support complet Oui
encodeInto
Expérimentale
Chrome Support complet 74Edge Aucun support NonFirefox Support complet 66IE Aucun support NonOpera Aucun support NonSafari Aucun support NonWebView Android Support complet 74Chrome Android Support complet 74Firefox Android Support complet 66Opera Android Aucun support NonSafari iOS Aucun support NonSamsung Internet Android Aucun support Non
encoding
Expérimentale
Chrome Support complet 38Edge Aucun support NonFirefox Support complet 19
Support complet 19
Support complet 18
Notes
Notes Firefox 18 implemented an earlier and slightly different version of the specification.
IE Aucun support NonOpera Support complet 25Safari Support complet 10.1WebView Android Support complet 38Chrome Android Support complet 38Firefox Android Support complet 19
Support complet 19
Support complet 18
Notes
Notes Firefox 18 implemented an earlier and slightly different version of the specification.
Opera Android Support complet OuiSafari iOS Support complet 10.3Samsung Internet Android Support complet Oui
Available in workers
Expérimentale
Chrome Support complet 38Edge Aucun support NonFirefox Support complet 20IE Aucun support NonOpera Support complet 25Safari Support complet 10.1WebView Android Support complet 38Chrome Android Support complet 38Firefox Android Support complet 20Opera Android ? Safari iOS Support complet 10.3Samsung Internet Android ?

Légende

Support complet  
Support complet
Aucun support  
Aucun support
Compatibilité inconnue  
Compatibilité inconnue
Fonctionnalité expérimentale. Celle-ci peut être amenée à changer par la suite.
Fonctionnalité expérimentale. Celle-ci peut être amenée à changer par la suite.
Voir les notes d'implémentation.
Voir les notes d'implémentation.

See also