Stampa emojis con JavaScript e HTML

Perché fa questo lavoro:

<p id="emoji">&#x1f604;</p>

E questo non:

document.getElementById("emoji").innerHTML = String.fromCharCode(parseInt('1f604', 16));
  • Benvenuti agli orrori di UTF-16 e coppie di surrogati.



2 Replies
  1. 37

    Un ‘char’ in JS termini è in realtà un codice UTF-16 unità, non di caratteri Unicode. (Questo triste stato di cose deriva da tempi antichi, quando non c’era una differenza*.) Utilizzare un carattere al di fuori del Basic Multilingual Plane devi scrivere in UTF-16-forma codificata di un coppia di surrogati di due a 16 bit unità di codice:

    String.fromCharCode(0xD83D, 0xDE04)

    In ECMAScript 6 avremo alcune interfacce che cerchiamo di affrontare con stringhe come se fossero pieni punti di codice Unicode, anche se sono incompleti e sono solo una facciata di tipo Stringa che è ancora memorizzato come una sequenza di unità di codice. Allora saremo in grado di fare:

    String.fromCodePoint(0x1F604)

    Vedere questa domanda per alcuni polyfill codice che consentono di utilizzare questa funzionalità nel browser di oggi.

    (*: Quando si ottiene l’accesso a una macchina del tempo mi sto lasciando Hitler da solo, e di tornare a inventare UTF-8 precedenti. UTF-16 non deve essere mai stato!)

  2. 6

    È inoltre possibile utilizzare il hacky metodo se non si desidera includere String.fromCodePoint() nel codice. Consiste nella creazione di un elemento virtuale …

    elem=document.createElement('p')

    … Riempirla con il Lavoro HTML…

    elem.innerHTML = "&#x1f604"

    … E finalmente il suo valore

    value = elem.innerHTML

    Per farla breve, questo funziona a causa del fatto che, non appena si imposta il valore di un contenitore HTML, il valore viene convertito nel corrispondente carattere.

    Spero di poter aiutare.

Lascia un commento