Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Printing emojis with JavaScript and HTML

Tags:

Why does this work:

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

And this doesn't:

document.getElementById("emoji").innerHTML = String.fromCharCode(parseInt('1f604', 16)); 
like image 920
Tom Söderlund Avatar asked Mar 10 '14 22:03

Tom Söderlund


People also ask

How do you display Emojis in Javascript?

To specify this emoji in HTML using the codepoint, we have to modify the value a bit. Add the &#x characters, remove the U+1 from the beginning of the codepoint, and just add the remaining digits from the codepoint as part of any text element.

How do you put Emojis in HTML code?

Emojis can be inserted in HTML documents by specifying charset to UTF-8 that will be used while displaying the web pages in the browser. This character encoding information is specified by using <meta> tag in the head section. After declaration of charset, emojis can be added in HTML by using <p> and <span> tags.

Does HTML support emoji?

Since Emojis are characters, they can be copied, displayed, and sized just like any other character in HTML.


1 Answers

A 'char' in JS terms is actually a UTF-16 code unit, not a full Unicode character. (This sad state of affairs stems from ancient times when there wasn't a difference*.) To use a character outside of the Basic Multilingual Plane you have to write it in the UTF-16-encoded form of a surrogate pair of two 16-bit code units:

String.fromCharCode(0xD83D, 0xDE04) 

In ECMAScript 6 we will get some interfaces that let us deal with strings as if they were full Unicode code points, though they are incomplete and are only a façade over the String type which is still stored as a code unit sequence. Then we'll be able to do:

String.fromCodePoint(0x1F604) 

See this question for some polyfill code to let you use this feature in today's browsers.

(*: When I get access to a time machine I'm leaving Hitler alone and going back to invent UTF-8 earlier. UTF-16 must never have been!)

like image 79
bobince Avatar answered Dec 04 '22 23:12

bobince