Je gère les chaînes utf-8 en JavaScript et je dois y échapper.
Escape ()/unescape () et encodeURI ()/decodeURI () fonctionnent dans mon navigateur.
échapper()
> var hello = "안녕하세요"
> var hello_escaped = escape(hello)
> hello_escaped
"%uC548%uB155%uD558%uC138%uC694"
> var hello_unescaped = unescape(hello_escaped)
> hello_unescaped
"안녕하세요"
encodeURI ()
> var hello = "안녕하세요"
> var hello_encoded = encodeURI(hello)
> hello_encoded
"%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94"
> var hello_decoded = decodeURI(hello_encoded)
> hello_decoded
"안녕하세요"
Cependant, Mozilla dit que escape () est obsolète .
Bien qu'encodeURI () et decodeURI () fonctionnent avec la chaîne utf-8 ci-dessus, la documentation (ainsi que les noms de fonction eux-mêmes) m'indique que ces méthodes sont destinées aux URI; Je ne vois pas les chaînes utf-8 mentionnées nulle part.
En termes simples, est-il possible d'utiliser encodeURI () et decodeURI () pour les chaînes utf-8?
Salut!
En ce qui concerne escape
et unescape
, je vis selon deux règles:
Comme mentionné dans la question, escape
et unescape
ont été déconseillés. En général, il convient d'éviter d'utiliser des fonctions obsolètes.
Donc, si encodeURIComponent
ou encodeURI
fait le tour pour vous, vous devriez utiliser cela au lieu de escape
.
Les navigateurs s'efforceront, dans la mesure du possible, d'obtenir une compatibilité ascendante. Tous les principaux navigateurs ont déjà implémenté escape
et unescape
; Pourquoi les dés-implémenteraient-ils?
Les navigateurs devraient redéfinir escape
et unescape
si la nouvelle spécification l’oblige. Mais attendez! Les personnes qui rédigent les spécifications sont assez intelligentes. Eux aussi, sont intéressés à ne pas briser la compatibilité en arrière!
Je me rends compte que l'argument ci-dessus est faible. Mais croyez-moi, ... en ce qui concerne les navigateurs, les logiciels obsolètes fonctionnent. Cela inclut même les balises HTML obsolètes telles que <xmp>
et <center>
.
escape
et unescape
:La question suivante est donc naturellement la suivante: quand utiliserait-on escape
ou unescape
?
Récemment, alors que je travaillais sur CloudBrave , j’ai eu à traiter avec utf8
, latin1
et inter-conversions.
Après avoir lu de nombreux articles de blog, j'ai réalisé à quel point c'était simple:
var utf8_to_latin1 = function (s) {
return unescape(encodeURIComponent(s));
};
var latin1_to_utf8 = function (s) {
return decodeURIComponent(escape(s));
};
Ces inter-conversions, sans utiliser escape
et unescape
sont plutôt impliquées. En évitant escape
et unescape
, la vie devient plus simple.
J'espère que cela t'aides.