Insérer un caractère unicode dans une page HTML (en java et javascript)

Il s’agit de savoir comment gérer correctement l’insertion de caractères unicode quel que soit l’encoding de la page HTML.

Sur le serveur, en java, un out.println (ou une insertion via Scriptlet dans une page JSP), doit insérer une chaîne qui est dans l’encodage de la page cible. Autrement dit, si on veut faire un code réutilisable, il est nécessaire d’escaper les caractères de la chaîne que l’on souhaite écrire.
En javascript, le code source lui-même doit être dans l’encoding de la page (à moins de préciser l’encoding sur la balise SCRIPT elle-même,et on est alors à la merci de toute modification du code source par un éditeur qui n'est pas dans le bon encoding).
Dans les deux cas, on utilise alors l’unicode escape, qui consiste à remplacer tous les caractères unicode (non ascii), par la séquence "u" suivi du code hexadécimal du codepoint unicode du caractère.
Par exemple, dans un code source en ISO8859-1, on ne peut encoder "cœlacanthe" dont le deuxième caractère (le œ collé) a pour code unicode U+0153 (soit 339 en décimal).
Par contre, le code suivant :

var maChaine="cu0153lacanthe" ; // une chaîne unicode de 10 caractères
document.write(maChaine)

marche quelque soit l'encoding de la page HTML

Par contre, si vous avez un champ de saisie dans lequel une saisie unicode a été réalisée, vous pouvez directement l’insérer dans la page.
Par exemple :
getElementById("divCible").innerHTML=monInput.value ;

Attention, contrairement à javascript, en java, l’unicode escape est interprété au niveau du code source (par exemple, il n’est pas possible d’insérer un u000A dans une chaîne java)
En ce qui concerne le contenu de la page html elle-même, par exemple la balise <title> il faut utiliser l’escape HTML ; si on ne veut pas se cantonner à l’édition de pages en UTF-8 et l’encoding en UTF-8. Par exemple :

Noter la différence entre
document.write("cu0153lacanthe");
et
document.write("cœlacanthe");
Dans le premier cas, la chaine a la bonne taille en nombre de caractères, il s’agit donc d’une chaîne de 10 caractères.
Dans le deuxième cas, on insère un caractère escapé HTML, la chaîne fait 17 caractères. C’est le moteur HTML du browser qui interprète le caractère escapé correctement.
Dans le browser, les deux formes s’affichent correctement !

Pour convertir un caractère unicode vers sa forme unicode escapée, il suffit de prendre son charCode et de le convertir en hexadécimal (via toString(16) :

"cœlacanthe".charCodeAt(1).toString(16)

rends 153

Un commentaire

  1. Interesting blog! Is your theme custom made or did you download it from somewhere?

    A theme like yours with a few simple adjustements would really make my
    blog stand out. Please let me know where you got your
    theme. Kudos

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.