Inserisci il carattere Unicode in JavaScript


134

Devo inserire un Omega (Ω) nella mia pagina html. Sto usando il suo codice di escape HTML per farlo, quindi posso scrivere Ωe ottenere Ω. Va tutto bene quando lo inserisco in un elemento HTML; tuttavia, quando provo a inserirlo nel mio JS, ad esempio var Omega = Ω, analizza quel codice come JS e il tutto non funziona. Qualcuno sa come procedere?


15
var Omega = "Ω";Troppo facile?
Heretic Monkey,

6
Il Blocco note non lo accetta, ma scrive solo un O: P
Bluefire il

13
@MikeMcCaughan Sì, ma se un altro sviluppatore incasina la codifica del file sorgente, hai perso ... Avrai sempre qualcuno a cui dire "OOOOps non sapevo che <segnaposto per il software> utilizza CP1250 come codifica predefinita e io non ha notato quel piccolo cambiamento quando ha commesso "o" personaggio incontra-cosa? " ; =)
Samuel Rossille,

3
@Bluefire passa a un miglior editor di testo che supporta l'impostazione della codifica dei caratteri (ad esempio notepad ++) e impostarlo su UTF-8. Quindi puoi scrivere cinese nel tuo codice sorgente se vuoi ... O rimanere nella categoria di ppl targetizzata dal mio primo commento; =) en.wikipedia.org/wiki/Character_encoding
Samuel Rossille,

4
@Bluefire, Notepad ++ dovrebbe gestirlo bene, devi solo cambiare la codifica nel menu in UTF-8 o UCS-2.
Heretic Monkey,

Risposte:


196

Immagino che tu voglia davvero Omegaessere una stringa contenente un omega maiuscolo? In tal caso, puoi scrivere:

var Omega = '\u03A9';

(Poiché Ω è il carattere Unicode con punto di codice U + 03A9 ; vale a 03A9dire 937, tranne che scritto come quattro cifre esadecimali.)


4
E se si vuole scoprire qual è il valore esadecimale per una stringa unicode: mothereff.in/js-escapes
StanE

Un altro modo per derivare il valore esadecimale per una stringa unicode da JavaScript è: "Ω" .codePointAt (0) .toString (16);
KostasX il

53

Sebbene @ruakh abbia dato una buona risposta, aggiungerò alcune alternative per completezza:

Potresti infatti utilizzare anche var Omega = '&#937;'in JavaScript, ma solo se il tuo codice JavaScript è:

  • all'interno di un attributo di evento, come in onclick="var Omega = '&#937'; alert(Omega)"o
  • in un scriptelemento all'interno di un documento XHTML (o XHTML + XML) servito con un tipo di contenuto XML.

In questi casi, il codice sarà prima (prima di essere passato all'interprete JavaScript) di essere analizzato da un parser HTML in modo che i riferimenti a caratteri come quelli &#937;vengano riconosciuti. Le restrizioni rendono questo approccio poco pratico nella maggior parte dei casi.

Puoi anche inserire il carattere Ω in quanto tale, come in var Omega = 'Ω', ma la codifica dei caratteri deve consentire ciò, la codifica deve essere dichiarata correttamente e hai bisogno di un software che ti permetta di inserire tali caratteri. Questa è una soluzione pulita e abbastanza fattibile se usi la codifica UTF-8 per tutto e sei pronto ad affrontare i problemi da essa creati. Il codice sorgente sarà leggibile e, leggendolo, vedrai immediatamente il carattere stesso, anziché le notazioni del codice. D'altra parte, può causare sorprese se altre persone iniziano a lavorare con il tuo codice.

L'uso della \unotazione, come in var Omega = '\u03A9', funziona indipendentemente dalla codifica dei caratteri ed è praticamente universale. Può tuttavia essere usato solo fino a U + FFFF, ovvero fino a \uffff, ma la maggior parte dei personaggi di cui la maggior parte delle persone ha mai sentito parlare cadono in quella zona. (Se hai bisogno di personaggi "più alti", devi usare coppie surrogate o uno dei due approcci sopra.)

Puoi anche costruire un carattere usando il String.fromCharCode()metodo, passando come parametro il numero Unicode, in decimale come in var Omega = String.fromCharCode(937)o in esadecimale come in var Omega = String.fromCharCode(0x3A9). Funziona fino a U + FFFF. Questo approccio può essere utilizzato anche quando il numero Unicode è presente in una variabile.


18
I tempi sono cambiati ora, 5 anni dopo, le persone usano queste cose chiamate "emoji" al di fuori della U+FFFFgamma. Anche JavaScript ha, quindi puoi farlo. var poop = '\u{1F4A9}';
Utente che non è un utente il

1
@Userthatisnotauser e questa dovrebbe essere la risposta accettata!
Marten Koetsier,

Come è possibile inserire il carattere 'blocco aperto' '\ uD83D \ uDD13' utilizzando l'unico codice che è '0x1F512' in JavaScript? E perché abbiamo bisogno di due codici per inserire un carattere?
tarekahf,

5
@tarekahf Ecco una breve lezione su Unicode. UTF-16 ha esteso solo i punti Unicode da U + 0000 a U + FFFF. Quindi Unicode crebbe e furono inventati surrogati in modo che UTF-16 potesse accedere a quei punti. Ma JavaScript può farlo ora: var lock = '\u{1F512}'E ottieni questo: 🔓
Utente che non è un utente il

4

La risposta è corretta, ma non è necessario dichiarare una variabile. Una stringa può contenere il tuo personaggio:

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

Sfortunatamente, quei codici in ASCII sono ancora necessari per visualizzare UTF-8, ma sto ancora aspettando (da troppi anni ...) il giorno in cui UTF-8 sarà lo stesso di ASCII, e ASCII sarà solo un ricordo del passato.


9
Emoji rende questi codici ancora più difficili da digitare! \u{1F641}= 🙁
Utente che non è un utente il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.