在Javascript中将Unicode值\uXXXX转换为字符

12
我以前从未做过这个,并不确定为什么会输出臭名昭著的编码字符。有什么办法可以按原样输出字符(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);
3个回答

22
.parseInt(yourString, 16)

on it to convert it to a decimal number. Then you can pass that to

String.fromCharCode()

.

var n = parseInt(hexString, 16);

获取该值,然后您可以使用.fromCharCode()并使用那个值。


我回家后会尝试一下。由于某种原因,我记得有人构建了一个字符串并在其上使用了 fromCharCode。 - vol7ron
所以基本上,在开放代码中只需要\u,而fromCharCode将把整数转换为Unicode字符,而不仅仅是ASCII字符。 - vol7ron

11

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

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

使用 replacefromCharCodeparseInt


1
这里有一个不该出现的 ; (第二个)。 - AymKdn
在这种情况下,最佳答案 - Richard Aguirre

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
为什么要点踩?如果你不解释哪里有问题,那么回答就无法得到改进。 - Guffa
@vol7ron:是的,我想你两年前已经这样做了,但昨天有人给它投了反对票。 - Guffa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接