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

   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);
有帮助吗?

解决方案

.fromCharCode()函数采用一个数字,而不是字符串。你不能把一个字符串这样的,希望解析器做你认为它会做;这只是没有办法的办法了语言的作品。

您可以ammend你的代码,以使一个字符串(不包括“\ U”)从十六进制数,和呼叫

var n = parseInt(hexString, 16);

来获取值。然后,你可以调用.fromCharCode()用的的值。

其他提示

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

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

使用 replace, fromCharCodeparseInt

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top