Inserir caractere Unicode no JavaScript

134

Preciso inserir um Omega (Ω) na minha página html. Estou usando seu código de escape HTML para fazer isso, para que eu possa escrever Ωe obter Ω. Tudo bem quando coloco em um elemento HTML; no entanto, quando tento colocá-lo no meu JS, por exemplo var Omega = Ω, ele analisa esse código como JS e a coisa toda não funciona. Alguém sabe como fazer isso?

Fogo azul
fonte
15
var Omega = "Ω";tão simples?
Heretic Monkey
6
O bloco de notas não aceita isso, apenas escreve um O: P
Bluefire
13
@MikeMcCaughan Sim, mas se outro desenvolvedor mexer com a codificação do arquivo de origem, você perdeu ... Você sempre terá alguém para dizer "OOOOps, eu não sabia que <espaço reservado para software> usa o CP1250 como a codificação padrão e eu" não percebeu essa pequena mudança ao confirmar "ou" enco-o personagem? " ; =)
Samuel Rossille 26/10/12
3
@Bluefire alterne para um editor de texto melhor que suporte a configuração da codificação de caracteres (por exemplo, o bloco de notas ++) e defina-o como UTF-8. Em seguida, você pode escrever chineese em seu código-fonte, se você quiser ... Ou ficar na categoria de ppl direcionados pelo meu primeiro comentário; =) en.wikipedia.org/wiki/Character_encoding
Samuel Rossille
4
@Bluefire, o Notepad ++ deve lidar bem, basta alterar a codificação no menu para UTF-8 ou UCS-2.
Heretic Monkey

Respostas:

196

Eu estou supondo que você realmente quer Omegaser uma string contendo um ômega maiúsculo? Nesse caso, você pode escrever:

var Omega = '\u03A9';

(Como Ω é o caractere Unicode com o ponto de código U + 03A9 ; ou 03A9seja 937, exceto escrito como quatro dígitos hexadecimais.)

ruakh
fonte
4
E se alguém quiser descobrir o que o valor hexadecimal para uma seqüência de caracteres Unicode é: mothereff.in/js-escapes
Stane
Outra maneira de derivar o valor hexadecimal de uma string unicode de dentro do JavaScript é: "Ω" .codePointAt (0) .toString (16);
KostasX
53

Embora o @ruakh tenha dado uma boa resposta, vou adicionar algumas alternativas para a integridade:

Na verdade, você poderia usar mesmo var Omega = '&#937;'em JavaScript, mas apenas se o seu código JavaScript for:

  • dentro de um atributo de evento, como em onclick="var Omega = '&#937'; alert(Omega)"ou
  • em um scriptelemento dentro de um documento XHTML (ou XHTML + XML) servido com um tipo de conteúdo XML.

Nesses casos, o código será analisado primeiro (antes de passar para o intérprete JavaScript) por um analisador HTML, para que as referências de caracteres como &#937;sejam reconhecidas. As restrições tornam essa abordagem impraticável na maioria dos casos.

Você também pode inserir o caractere as como tal, como em var Omega = 'Ω', mas a codificação de caracteres deve permitir isso, a codificação deve ser declarada corretamente e você precisa de um software que permita inserir esses caracteres. Essa é uma solução limpa e bastante viável se você usar a codificação UTF-8 para tudo e estiver preparado para lidar com os problemas criados por ela. O código-fonte será legível e, lendo-o, você verá imediatamente o próprio caractere, em vez de notações de código. Por outro lado, pode causar surpresas se outras pessoas começarem a trabalhar com seu código.

Usar a \unotação, como em var Omega = '\u03A9', funciona independentemente da codificação de caracteres, e na prática é quase universal. No entanto, pode ser usado apenas até U + FFFF, ou seja, até \uffff, mas a maioria dos personagens que a maioria das pessoas já ouviu falar se encaixa nessa área. (Se você precisar de caracteres "mais altos", precisará usar pares substitutos ou uma das duas abordagens acima).

Você também pode construir um caractere usando o String.fromCharCode()método, passando como parâmetro o número Unicode, em decimal como em var Omega = String.fromCharCode(937)ou em hexadecimal como em var Omega = String.fromCharCode(0x3A9). Isso funciona até U + FFFF. Essa abordagem pode ser usada mesmo quando você tem o número Unicode em uma variável.

Jukka K. Korpela
fonte
18
Os tempos mudaram agora, cinco anos depois, as pessoas usam essas coisas chamadas "emoji" fora do U+FFFFintervalo. O JavaScript também tem, então você pode fazer isso. var poop = '\u{1F4A9}';
Usuário que não é usuário
1
@Userthatisnotauser e essa deve ser a resposta aceita!
Marten Koetsier
Como você pode inserir o caractere 'cadeado aberto' \ uD83D \ uDD13 'usando o código que é' 0x1F512 'em JavaScript? E por que precisamos de dois códigos para inserir um caractere?
Tarekahf
5
@tarekahf Aqui está uma breve lição sobre Unicode. O UTF-16 abrange apenas os pontos Unicode U + 0000 a U + FFFF. Então o Unicode cresceu e os substitutos foram inventados para que o UTF-16 pudesse acessar esses pontos. Mas o JavaScript pode fazer isso agora: var lock = '\u{1F512}'E você obtém o seguinte: 🔓
Usuário que não é usuário
4

A resposta está correta, mas você não precisa declarar uma variável. Uma string pode conter seu personagem:

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

Infelizmente ainda são necessários esses códigos em ASCII para exibir UTF-8, mas ainda estou aguardando (há muitos anos ...) o dia em que UTF-8 será o mesmo que ASCII e ASCII será apenas uma lembrança do passado.

fresko
fonte
9
Emoji tornam esses códigos ainda mais difíceis de digitar! \u{1F641}= 🙁
Usuário que não é usuário