web-dev-qa-db-fra.com

Insérer un caractère Unicode dans JavaScript

Je dois insérer un Omega (Ω) sur ma page HTML. J'utilise son code HTML échappé pour le faire afin de pouvoir écrire Ω et obtenir Ω. Tout va bien quand je le mets dans un élément HTML; Cependant, lorsque j'essaie de le mettre dans mon JS, par exemple var Omega = Ω, il analyse ce code en tant que JS et le tout ne fonctionne pas. Quelqu'un sait comment s'y prendre?

114
Bluefire

Je suppose que vous voulez réellement que Omega soit une chaîne contenant un oméga majuscule? Dans ce cas, vous pouvez écrire:

var Omega = '\u03A9';

(Parce que Ω est le caractère Unicode avec le code U + 03A9 ; c’est-à-dire que 03A9 est 937, sauf qu’il s’agit de quatre chiffres hexadécimaux.)

175
ruakh

Bien que @ruakh ait donné une bonne réponse, je vais ajouter quelques alternatives pour être complet:

Vous pouvez en fait utiliser même var Omega = 'Ω' en JavaScript, mais uniquement si votre code JavaScript est:

  • à l'intérieur d'un attribut d'événement, comme dans onclick="var Omega = '&#937'; alert(Omega)" ou
  • dans un élément script à l'intérieur d'un document XHTML (ou XHTML + XML) servi avec un type de contenu XML.

Dans ces cas, le code sera d'abord (avant d'être transmis à l'interpréteur JavaScript) être analysé par un analyseur HTML afin que les références de caractère telles que Ω soient reconnues. Les restrictions rendent cette approche peu pratique dans la plupart des cas.

Vous pouvez également entrer le caractère Ω en tant que tel, comme dans var Omega = 'Ω', mais l'encodage de caractères doit le permettre, l'encodage doit être correctement déclaré et vous avez besoin d'un logiciel vous permettant de saisir ces caractères. C'est une solution propre et tout à fait réalisable si vous utilisez le codage UTF-8 pour tout et que vous êtes prêt à gérer les problèmes qu'il crée. Le code source sera lisible, et en le lisant, vous voyez immédiatement le caractère lui-même, au lieu des notations de code. D'un autre côté, cela peut créer des surprises si d'autres personnes commencent à travailler avec votre code.

L'utilisation de la notation \u, comme dans var Omega = '\u03A9', fonctionne indépendamment du codage de caractères et est en pratique presque universelle. Il ne peut cependant être utilisé en tant que tel que jusqu’à U + FFFF, c’est-à-dire jusqu’à \uffff, mais la plupart des personnages dont la plupart des gens ont entendu parler se trouvent dans cette zone. (Si vous avez besoin de caractères "supérieurs", vous devez utiliser des paires de substitution ou l'une des deux approches ci-dessus.)

Vous pouvez également créer un caractère à l'aide de la méthode String.fromCharCode(), en donnant comme paramètre le numéro Unicode, en décimal comme dans var Omega = String.fromCharCode(937) ou en hexadécimal comme dans var Omega = String.fromCharCode(0x3A9). Cela fonctionne jusqu'à U + FFFF. Cette approche peut être utilisée même lorsque vous avez le numéro Unicode dans une variable.

45
Jukka K. Korpela

La réponse est correcte, mais vous n'avez pas besoin de déclarer une variable. Une chaîne peut contenir votre personnage:

"This string contains omega, that looks like this: \u03A9"

Malheureusement, ces codes dans ASCII sont nécessaires pour afficher UTF-8, mais j'attends toujours (depuis trop d'années ...) le jour où UTF-8 sera identique à ASCII était et ASCII sera simplement un souvenir du passé.

4
fresko