web-dev-qa-db-fra.com

Utiliser encodeURI () et escape () pour les chaînes utf-8 en JavaScript

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?

15
SeanPlusPlus

Salut!

En ce qui concerne escape et unescape, je vis selon deux règles:

  1. Evitez-les quand vous le pouvez facilement.
  2. Sinon, utilisez-les.

En les évitant quand vous pouvez facilement:

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 utiliser quand vous ne pouvez pas les éviter facilement:

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 escapeet 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>.

Utiliser 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.

15
Sumukh Barve