Insertar caracteres Unicode en JavaScript

134

Necesito insertar un Omega (Ω) en mi página html. Estoy usando su código escapado HTML para hacer eso, así puedo escribir Ωy obtener Ω. Eso está muy bien cuando lo pongo en un elemento HTML; sin embargo, cuando trato de ponerlo en mi JS, por ejemplo var Omega = Ω, analiza ese código como JS y no funciona todo. Alguien sabe cómo hacer esto?

Fuego azul
fuente
15
var Omega = "Ω";demasiado simple?
Heretic Monkey
66
El Bloc de notas no acepta eso, solo escribe un O: P
Bluefire
13
@MikeMcCaughan Sí, pero si otro desarrollador se mete con la codificación del archivo fuente, ha perdido ... Siempre tendrá a alguien que diga "OOOOps, no sabía que <marcador de posición para software> usa CP1250 como codificación predeterminada y yo no notó ese pequeño cambio al confirmar "o" codificación de caracteres ¿qué? " ; =)
Samuel Rossille
3
@Bluefire cambie a un mejor editor de texto que admita la configuración de la codificación de caracteres (por ejemplo, notepad ++) y configúrelo en UTF-8. Entonces puede escribir chino en su código fuente si lo desea ... O permanecer en la categoría de personas objetivo de mi primer comentario; =) en.wikipedia.org/wiki/Character_encoding
Samuel Rossille
44
@Bluefire, Notepad ++ debería manejarlo bien, solo necesita cambiar la codificación en el menú a UTF-8 o UCS-2.
Heretic Monkey

Respuestas:

196

¿Supongo que realmente quieres Omegaser una cadena que contenga un omega en mayúsculas? En ese caso, puedes escribir:

var Omega = '\u03A9';

(Debido a que Ω es el carácter Unicode con el punto de código U + 03A9 ; es decir, 03A9es 937, excepto que está escrito como cuatro dígitos hexadecimales).

ruakh
fuente
44
Y si uno quiere averiguar cuál es el valor hexadecimal para una cadena unicode: mothereff.in/js-escapes
StanE
Otra forma de derivar el valor hexadecimal para una cadena unicode desde JavaScript es: "Ω" .codePointAt (0) .toString (16);
KostasX
53

Aunque @ruakh dio una buena respuesta, agregaré algunas alternativas para completar:

De hecho, podría usar incluso var Omega = '&#937;'en JavaScript, pero solo si su código JavaScript es:

  • dentro de un atributo de evento, como en onclick="var Omega = '&#937'; alert(Omega)"o
  • en un scriptelemento dentro de un documento XHTML (o XHTML + XML) servido con un tipo de contenido XML.

En estos casos, el código será analizado primero (antes de pasar al intérprete de JavaScript) por un analizador HTML para que &#937;se reconozcan las referencias de caracteres como . Las restricciones hacen de este un enfoque poco práctico en la mayoría de los casos.

También puede ingresar el carácter Ω como tal, como en var Omega = 'Ω', pero luego la codificación de caracteres debe permitir eso, la codificación debe declararse correctamente y necesita un software que le permita ingresar dichos caracteres. Esta es una solución limpia y bastante factible si utiliza la codificación UTF-8 para todo y está preparado para lidiar con los problemas creados por ella. El código fuente será legible, y al leerlo, verá inmediatamente el carácter en sí, en lugar de las anotaciones de código. Por otro lado, puede causar sorpresas si otras personas comienzan a trabajar con su código.

El uso de la \unotación, como en var Omega = '\u03A9', funciona independientemente de la codificación de caracteres, y en la práctica es casi universal. Sin embargo, puede usarse como tal solo hasta U + FFFF, es decir, hasta \uffff, pero la mayoría de los personajes de los que la mayoría de la gente ha oído hablar caen en esa área. (Si necesita caracteres "más altos", debe usar pares sustitutos o uno de los dos enfoques anteriores).

También puede construir un carácter utilizando el String.fromCharCode()método, pasando como parámetro el número Unicode, en decimal como en var Omega = String.fromCharCode(937)o en hexadecimal como en var Omega = String.fromCharCode(0x3A9). Esto funciona hasta U + FFFF. Este enfoque se puede usar incluso cuando tiene el número Unicode en una variable.

Jukka K. Korpela
fuente
18
Los tiempos han cambiado ahora, 5 años después, la gente usa estas cosas llamadas "emoji" fuera del U+FFFFrango. JavaScript también lo tiene, así que puedes hacer esto. var poop = '\u{1F4A9}';
Usuario que no es un usuario
1
¡@Userthatisnotauser y esa debería ser la respuesta aceptada!
Marten Koetsier
¿Cómo puede insertar el carácter 'bloqueo abierto' '\ uD83D \ uDD13' usando el código que es '0x1F512' en JavaScript? ¿Y por qué necesitamos dos códigos para insertar un carácter?
tarekahf
55
@tarekahf Aquí hay una breve lección sobre Unicode. UTF-16 solo abarcó los puntos Unicode U + 0000 a U + FFFF. Luego, Unicode creció y se inventaron sustitutos para que UTF-16 pudiera acceder a esos puntos. Pero JavaScript puede hacer esto ahora: var lock = '\u{1F512}'Y obtienes esto: 🔓
Usuario que no es usuario
4

La respuesta es correcta, pero no necesita declarar una variable. Una cadena puede contener tu personaje:

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

Desafortunadamente, esos códigos en ASCII son necesarios para mostrar UTF-8, pero todavía estoy esperando (desde hace muchos años ...) el día en que UTF-8 sea el mismo que ASCII, y ASCII será solo un recuerdo del pasado.

Fresko
fuente
9
¡Los emoji hacen que esos códigos sean aún más difíciles de escribir! \u{1F641}= 🙁
Usuario que no es un usuario