Unicode 值 \uXXXX 到 Javascript 中的字符

IT技术 javascript encoding character-encoding string-decoding
2021-02-15 18:42:19

我以前从未这样做过,也不知道为什么它会输出臭名昭著的编码字符。关于如何输出字符的任何想法(ASCII + Unicode)?我认为\u0041-\u005A应该A-Z以 UTF-8打印,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);
3个回答

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

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

var n = parseInt(hexString, 16);

来获得value。然后你可以.fromCharCode()那个调用

所以基本上,\u只在开放代码中需要,fromCharCode并将整数转换为 unicode 字符,而不仅仅是 ASCII 字符
2021-05-04 18:42:19
我回家后一定要试试。出于某种原因,我想我记得有人构建了一个字符串并在其上使用了 fromCharCode。
2021-05-05 18:42:19

替换文本中所有 unicode 编码的特殊字符的有用片段是:

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

使用replace,fromCharCodeparseInt

有一个;不应该在那里(第二个)
2021-04-26 18:42:19
在这种情况下的最佳答案
2021-05-06 18:42:19

如果您想使用\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)会容易很多......

@vol7ron:是的,我想你两年前做过,但昨天有人投了反对票。
2021-05-06 18:42:19
为什么投反对票?如果您不解释您认为错误的地方,则无法改善答案。
2021-05-11 18:42:19
我尝试使用一种形式的 eval,但没有用;我真的不记得我做了什么。也许是因为我当时正在打印到控制台。我看到你做了 65..90 的范围;有任何范围吗?- 就像我说的,我想看到的不仅仅是 ASCII,我认为它止于 255。
2021-05-13 18:42:19