【问题标题】:Unicode value \uXXXX to Character in JavascriptUnicode 值 \uXXXX 到 Javascript 中的字符
【发布时间】:2011-04-19 14:48:45
【问题描述】:

我以前从未这样做过,也不知道为什么它会输出臭名昭著的 编码字符。关于如何输出字符的任何想法(ASCII + Unicode)?我认为\u0041-\u005A 应该以UTF-8 打印A-Z,Firefox 报告的是页面编码。

   var c   = new Array("F","E","D","C","B","A",9,8,7,6,5,4,3,2,1,0);
   var n   = 0;
   var d   = "";
   var o   = "";

   for (var i=16;i--;){
      for (var j=16;j--;){
         for (var k=16;k--;){
            for (var l=16;l--;){

               d =  c[i].toString()
                 +  c[j].toString()
                 +  c[k].toString()
                 +  c[l].toString();

               o += ( ++n + ": " 
                    + d   + " = " 
                    + String.fromCharCode("\\u" + d) 
                    + "\n<br />" );

               if(n>=500){i=j=k=l=0;} // stop early
            }
         }
      }
   }

   document.write(o);

【问题讨论】:

    标签: javascript encoding character-encoding string-decoding


    【解决方案1】:

    .fromCharCode() 函数接受一个数字,而不是一个字符串。你不能把这样的字符串放在一起并期望解析器做你认为它会做的事情;这不是语言的工作方式。

    您可以修改您的代码,从您的十六进制数字中创建一个字符串(不带“\u”),然后调用

    var n = parseInt(hexString, 16);
    

    获取价值。然后你可以用 that 值调用.fromCharCode()

    【讨论】:

    • 我回家后一定要试试。出于某种原因,我想我记得有人构建了一个字符串并在其上使用了 fromCharCode。
    • 所以基本上,\u 只需要在开放代码中,fromCharCode 会将整数转换为 unicode 字符,而不仅仅是 ASCII 字符
    【解决方案2】:

    用于替换文本中所有 unicode 编码的特殊字符的有用 sn-p 是:

    var rawText = unicodeEncodedText.replace(
                      /\\u([0-9a-f]{4})/g, 
                      function (whole, group1) {
                          return String.fromCharCode(parseInt(group1, 16));
                      }
                  );
    

    使用replacefromCharCodeparseInt

    【讨论】:

    • 有一个不应该出现的;(第二个)
    • 这种情况下的最佳答案
    【解决方案3】:

    如果您想使用\unnnn 语法来创建字符,您必须在代码中的文字字符串中执行此操作。如果要动态执行,则必须在运行时评估的文字字符串中执行:

    var hex = "0123456789ABCDEF";
    var s = "";
    for (var i = 65; i <= 90; i++) {
      var hi = i >> 4;
      var lo = i % 16;
      var code = "'\\u00" + hex[hi] + hex[lo] + "'";
      var char = eval(code);
      s += char;
    }
    document.write(s);
    

    当然,只使用String.fromCharCode(i) 会容易得多...

    【讨论】:

    • 我尝试使用一种 eval 形式,但不起作用;我真的不记得我做了什么。也许是因为我当时正在打印到控制台。我看到你的范围是 65..90;有什么范围吗? - 就像我说的,我希望看到的不仅仅是 ASCII,我认为它在 255 处停止。
    • 为什么投反对票?如果你不解释你认为错误的地方,它就无法改进答案。
    • @vol7ron:是的,我想你在两年前做过,但昨天有人投了反对票。
    猜你喜欢
    • 2016-04-08
    • 2013-10-17
    • 1970-01-01
    • 2023-03-29
    • 2011-02-09
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 2019-05-12
    相关资源
    最近更新 更多