Ce que fait cet outil
Il lit le contenu d’un littéral de chaîne Java et rend le texte qu’il représente. Les formes nommées \n, \r, \t, \b, \f et \0 redeviennent leurs caractères, \uXXXX est décodé, et une paire de substitution écrite \ud83d\ude00 est recomposée en l’unique caractère qu’elle encode — c’est ainsi que tout caractère au-delà de U+FFFF doit s’écrire dans un littéral Java.
Comme Java échappe tout caractère non-ASCII en sortie, c’est l’étape qui rend un littéral échappé de nouveau lisible : un mur de é et de 中 redevient le texte accentué et CJK qu’il représente.
Là où Java diffère
L’ensemble de Java est plus petit que celui de JavaScript. Ni \v ni \a n’existent : tous deux ressortent en lettre nue, v et a, plutôt qu’en caractère de contrôle que le langage n’a jamais eu. Les échappements octaux, en revanche, sont décodés en entier : \0 donne NUL, \101 donne A, et la forme à trois chiffres n’est acceptée que si le premier vaut 0 à 3 — ce que dit la grammaire de Java elle-même.
Dans l’autre sens, l’outil est plus permissif que le compilateur. \u{1F600} et \xNN sont acceptés parce qu’ils apparaissent sans cesse dans des textes copiés d’un langage à l’autre, mais aucun des deux n’est du Java valide : javac les refuse.
Ce qu’il ne fait pas
Il décode le contenu d’un littéral, pas une expression Java : rien n’est concaténé, et les blocs de texte (""") ont leurs propres règles d’espacement accessoire que cet outil n’applique pas.
Confidentiel par conception
Tout s’exécute localement dans votre navigateur en JavaScript. Vos données ne sont jamais envoyées sur un serveur, ce qui rend l’outil sûr pour des contenus sensibles, et il fonctionne hors ligne.