Search code examples
javascriptunicodecharacter-encodingnon-ascii-characters

How to get the Unicode code point for a character in Javascript?


I'm using a barcode scanner to read a barcode on my website (the website is made in OpenUI5).

The scanner works like a keyboard that types the characters it reads. At the end and the beginning of the typing it uses a special character. These characters are different for every type of scanner.

Some possible characters are:

In my code I use if (oModelScanner.oData.scanning && oEvent.key == "\u2584") to check if the input from the scanner is ▄.

Is there any way to get the code from that character in the \uHHHH style? (with the HHHH being the hexadecimal code for the character)

I tried the charCodeAt but this returns the decimal code.

With the codePointAt examples they make the code I need into a decimal code so I need a reverse of this.


Solution

  • Javascript strings have a method codePointAt which gives you the integer representing the Unicode point value. You need to use a base 16 (hexadecimal) representation of that number if you wish to format the integer into a four hexadecimal digits sequence (as in the response of Nikolay Spasov).

    var hex = "▄".codePointAt(0).toString(16);
    var result = "\\u" + "0000".substring(0, 4 - hex.length) + hex;
    

    However it would probably be easier for you to check directly if you key code point integer match the expected code point

    oEvent.key.codePointAt(0) === '▄'.codePointAt(0);
    

    Note that "symbol equality" can actually be trickier: some symbols are defined by surrogate pairs (you can see it as the combination of two halves defined as four hexadecimal digits sequence).

    For this reason I would recommend to use a specialized library.

    you'll find more details in the very relevant article by Mathias Bynens