我之前从未这样做过,也不确定为什么输出臭名昭着的�
编码字符。关于如何输出字符的任何想法(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);
答案 0 :(得分:21)
.fromCharCode()
函数采用数字,而不是字符串。你不能把这样的字符串放在一起,并期望解析器做你认为它会做的事情;这不是语言的工作方式。
你可以修改你的代码,从你的十六进制数字中创建一个字符串(不带'\ u'),然后调用
var n = parseInt(hexString, 16);
获取价值。然后,您可以使用 值来调用.fromCharCode()
。
答案 1 :(得分:8)
用于替换文本中所有unicode编码的特殊字符的有用代码段是:
var rawText = unicodeEncodedText.replace(
/\\u([0-9a-f]{4})/g,
function (whole, group1) {
return String.fromCharCode(parseInt(group1, 16));
}
);
答案 2 :(得分:4)
如果要使用\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)
会更容易......