【问题标题】:How to print literal unicode string in Javascript?如何在Javascript中打印文字unicode字符串?
【发布时间】:2012-06-11 19:50:55
【问题描述】:

我有一个包含特殊 unicode 字符的字符串的数组:

var a = [
    ["a", 33],  
    ["h\u016B", 44],
    ["s\u00EF", 51],
    ...
];

当我遍历这个数组时:

for (i=0;i<a.length;i++) {
    document.write(a[i][0] + "<br />");
}

它打印带有重音符号的字符:

a
hù
sô
...

我想要:

a
h\u016B
s\u00EF
...

如何在 Javascript 中实现这一点?

【问题讨论】:

    标签: javascript unicode character unicode-literals


    【解决方案1】:

    javascript 的string.charCodeAt() 应该会有所帮助。即

    "test".charCodeAt(0) 将返回"t" 的数字代码。

    除此之外,您还需要编写一个 if 语句来检查字符是否为非 ASCII 等。

    【讨论】:

      【解决方案2】:

      这样的?

      /* Creates a uppercase hex number with at least length digits from a given number */
      function fixedHex(number, length){
          var str = number.toString(16).toUpperCase();
          while(str.length < length)
              str = "0" + str;
          return str;
      }
      
      /* Creates a unicode literal based on the string */    
      function unicodeLiteral(str){
          var i;
          var result = "";
          for( i = 0; i < str.length; ++i){
              /* You should probably replace this by an isASCII test */
              if(str.charCodeAt(i) > 126 || str.charCodeAt(i) < 32)
                  result += "\\u" + fixedHex(str.charCodeAt(i),4);
              else
                  result += str[i];
          }
      
          return result;
      }
      
      var a = [
          ["a", 33],  
          ["h\u016B", 44],
          ["s\u00EF", 51]
      ];
      
      var i;
      for (i=0;i<a.length;i++) {
          document.write(unicodeLiteral(a[i][0]) + "<br />");
      }
      

      结果

      一个
      h\u016B
      s\u00EF

      JSFiddle

      【讨论】:

      • 很好的解决方案,但我认为应该是if(str.charCodeAt(i) &gt; 127)(ASCII 停止在 0x7F)。
      • @dda:确实如此。然而0x7F 是DEL,所以0x7E 应该是一个更好的上限。编辑了我的答案,感谢您的评论:)。
      • 这不会像 \u0050 那样显示 unicode(这是一个有效的 ascii 字符)。如何处理?
      • @gaurav5430 这不是原始问题中的意图。删除if。注意'\u0050'"P" 具有相同的表示;您无法检查 "P" 最初是否为 '\u0050'
      • @Zeta 如果我删除 if,它会将所有内容转换为 unicode
      【解决方案3】:

      如果你有一个 unicode char 并且你想要它作为一个字符串,你可以这样做

      x = "h\u016B";
      // here the unicode is the second char
      uniChar = x.charCodeAt(1).toString(16); // 16b
      uniChar = uniChar.toUpperCase(); // it is now 16B
      uniChar = "\\u0" + uniChar; // it is now \\u016B
      x = x.charAt(0) + uniChar; // x = "h\\u016B" which prints as you wish
      

      【讨论】:

        【解决方案4】:

        所以,来到这里试图回答这个问题:Javascript: display unicode as it is 但由于这里的这个问题,它已被关闭。

        这个问题的另一个答案: 也可以(至少在某些现代浏览器中)使用String.raw - 函数

        语法是这样的:

        var rawStr = String.raw`Hello \u0153`;
        

        这是一个工作小提琴(Chrome,FF):http://jsfiddle.net/w9L6qgt6/1/

        【讨论】:

          猜你喜欢
          • 2014-08-23
          • 1970-01-01
          • 2013-11-23
          • 1970-01-01
          • 2019-04-26
          • 2010-11-27
          • 2015-11-16
          • 2021-12-26
          相关资源
          最近更新 更多