Insérer un caractère Unicode dans JavaScript

134

J'ai besoin d'insérer un Omega (Ω) sur ma page html. J'utilise son code échappé HTML pour faire cela, donc je peux écrire Ωet obtenir Ω. C'est très bien quand je le mets dans un élément HTML; cependant, quand j'essaye de le mettre dans mon JS, par exemple var Omega = Ω, il analyse ce code comme JS et le tout ne fonctionne pas. Quelqu'un sait comment s'y prendre?

Feu bleu
la source
15
var Omega = "Ω";trop simple?
Heretic Monkey
6
Le bloc-notes n'accepte pas cela, il écrit simplement un O: P
Bluefire
13
@MikeMcCaughan Oui mais si un autre développeur gâche l'encodage du fichier source, vous avez perdu ... Vous aurez toujours quelqu'un pour dire "OOOOps je ne savais pas que <placeholder for software> utilise CP1250 comme encodage par défaut et je n'a pas remarqué ce petit changement lors de la validation "ou" caractère enco-quoi? " ; =)
Samuel Rossille
3
@Bluefire passe à un meilleur éditeur de texte qui prend en charge la définition du codage des caractères (par exemple, notepad ++) et le définit sur UTF-8. Ensuite, vous pouvez écrire du chinois dans votre code source si vous le souhaitez ... Ou rester dans la catégorie des personnes ciblées par mon premier commentaire; =) en.wikipedia.org/wiki/Character_encoding
Samuel Rossille
4
@Bluefire, Notepad ++ devrait le gérer correctement, il vous suffit de changer l'encodage dans le menu en UTF-8 ou UCS-2.
Heretic Monkey

Réponses:

197

Je suppose que vous voulez réellement Omegaêtre 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 point de code U + 03A9 ; c'est-à- 03A9dire 937, sauf écrit sous forme de quatre chiffres hexadécimaux.)

Ruakh
la source
4
Et si l'on veut savoir quelle est la valeur hexadécimale d'une chaîne unicode: mothereff.in/js-escapes
StanE
Une autre façon de dériver la valeur hexadécimale d'une chaîne Unicode à partir de JavaScript est: "Ω" .codePointAt (0) .toString (16);
KostasX
53

Bien que @ruakh ait donné une bonne réponse, j'ajouterai quelques alternatives pour être complet:

Vous pourriez en fait utiliser même var Omega = '&#937;'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 scriptélément à 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 passé à l'interpréteur JavaScript) analysé par un analyseur HTML afin que les références de caractères comme &#937;soient reconnues. Les restrictions en font une approche peu pratique dans la plupart des cas.

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

L'utilisation de la \unotation, comme dans var Omega = '\u03A9', fonctionne indépendamment du codage des caractères, et elle est en pratique presque universelle. Il ne peut cependant être utilisé que jusqu'à U + FFFF, c'est-à-dire jusqu'à \uffff, mais la plupart des personnages dont la plupart des gens ont entendu parler tombent dans ce domaine. (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 construire un caractère à l'aide de la String.fromCharCode()méthode, en passant en paramètre le nombre 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.

Jukka K. Korpela
la source
18
Les temps ont changé maintenant, 5 ans plus tard, les gens utilisent ces choses appelées "emoji" en dehors de la U+FFFFgamme. JavaScript a aussi, donc vous pouvez le faire. var poop = '\u{1F4A9}';
Utilisateur qui n'est pas un utilisateur
1
@Userthatisnotauser et cela devrait être la réponse acceptée!
Marten Koetsier
Comment pouvez-vous insérer le caractère «verrou ouvert» «\ uD83D \ uDD13» en utilisant le seul code qui est «0x1F512» en JavaScript? Et pourquoi avons-nous besoin de deux codes pour insérer un caractère?
tarekahf
5
@tarekahf Voici une brève leçon sur Unicode. UTF-16 couvre uniquement les points Unicode U + 0000 à U + FFFF. Puis Unicode a grandi et des substituts ont été inventés pour que UTF-16 puisse accéder à ces points. Mais JavaScript peut simplement le faire maintenant: var lock = '\u{1F512}'Et vous obtenez ceci: 🔓
Utilisateur qui n'est pas un utilisateur
4

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

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

Malheureusement, ces codes en ASCII sont encore nécessaires pour afficher UTF-8, mais j'attends toujours (depuis trop d'années ...) le jour où UTF-8 sera le même que ASCII l'était, et ASCII ne sera qu'un souvenir du passé.

fresko
la source
9
Les emojis rendent ces codes encore plus difficiles à saisir! \u{1F641}= 🙁
Utilisateur qui n'est pas un utilisateur