How to use five digit long Unicode characters in JavaScript

前端 未结 5 2108

In JavaScript I can do this:

foo = \"\\u2669\" // 1/4 note

But I can\'t do this

foo = \"\\u1D15D\" // full note  -five hex digi         


        
相关标签:
5条回答
  • 2021-02-19 10:24

    Nowadays, you can simply use String.fromCodePoint(), as documented in MDN. For instance:

    > String.fromCodePoint(0x1f0a1)
    "                                                                    
    0 讨论(0)
  • 2021-02-19 10:31

    In the MDN documentation for fromCharCode, they note that javascript will only naturally handle characters up to 0xFFFF. However, they also have an implementation of a fixed method for fromCharCode that may do what you want (reproduced below):

    function fixedFromCharCode (codePt) {
        if (codePt > 0xFFFF) {
            codePt -= 0x10000;
            return String.fromCharCode(0xD800 + (codePt >> 10), 0xDC00 + (codePt & 0x3FF));
        }
        else {
            return String.fromCharCode(codePt);
        }
    }
    
    foo = fixedFromCharCode(0x1D15D);
    
    0 讨论(0)
  • 2021-02-19 10:34

    I did a little checking and it appears that there is no full note near 0x2669. (table of unicode chars)

    Although using 0x01D15D does give me a unknown unicode character this could be because I don't have a music font though. Javascript will try to parse as byte as it can and 0x1D15D is 2.5 bytes padding it with a 0 will make it 3 and parsable.

    Also this was quite handy: unicode.org/charts/PDF/U1D100.pdf

    0 讨论(0)
  • 2021-02-19 10:34

    You can use this:

    function fromOutsideBMP(cp) {
    // 0x01D120
      var x=cp-0x10000;
      var top10=parseInt("11111111110000000000",2);
      var end10=parseInt("1111111111",2);
      var part1=(x&top10)/1024+0xD800;
      var part2=(x&end10)+0xDC00;
      var s=String.fromCharCode(part1)+String.fromCharCode(part2);
      return s;
    }
    

    Example:

    > fromOutsideBMP(0x01d122)
      "                                                                    
    0 讨论(0)
  • 2021-02-19 10:45

    Try putting the unicode between curly braces: '\u{1D15D}'.

    0 讨论(0)
提交回复
热议问题