您的位置:首页 > Web前端 > JavaScript

Javascript输出所有Unicode字符

2014-02-27 14:28 1601 查看
不说废话,直接上源代码:

var hex = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');
var thestr = '';
for (var a = 0; a < 16; a++) {
for (var b = 0; b < 16; b++) {
for (var c = 0; c < 16; c++) {
for (var d = 0; d < 16; d++) {
var ustr = '\\u' + hex[a] + hex + hex[c] + hex[d];
thestr += ustr;
}
}
}
}
eval('document.write(\'' + thestr + '\');');


简单解释一下。Javascript中的Unicode字符可以用“\u”后面加4位十六进制数字来表示,这实际上也是一种转义字符,也就是说我上面的程序只是遍历输出‘\u0000’~‘\uffff’,所以就输出了所有Unicode字符。

需要注意的一点是,我们一般的思路都是循环向变量里先存入"\u",再生成一个四位的十六进制数字继续存入变量,如代码:

var ustr='\u';//这行会报错
ustr+=hex[a]+hex[b]+hex[c]+hex[d];


但是事实情况是不能直接往变量里存“\u”,因为这样会被认为"\u"是一个非法的Unicode字符而导致JS代码报错;我的解决方案是使用转义字符'\\'来存入'\',如代码:

var ustr='\\';
ustr+='u';
ustr+=hex[a]+hex[b]+hex[c]+hex[d];


我们都知道,转义字符如'\t'在程序中会被认为是一个字符,那么如'\u89ab'这样的转义字符在程序中也应该是被认为是一个字符的,可我们现在内存中的"\u89ab"不是一个字符,而是6个字符,这样直接输出的话页面中只会原样显示"\u89ab",显然不是我们想要的那个字符,怎么办呢?很简单,使用Javascript自带的eval方法可以将字符串作为Javascript代码重新执行一遍,具体用法自己搜,重新执行的时候由于是一次性解析'\u89ab'这个数据,所以可以正确识别为一个Unicode转义字符,也就可以正确输出这个Unicode字符了。

表达能力有限,我已经努力用详细的语言来解释了,不过觉得还是有点不好理解。一层窗户纸,一筒就破。

其实我觉得另外一种算法性能更好一些,就是直接输入Unicode字符到变量中,不用使用eval转化就可以直接输出,在这抛砖引玉了,有待进一步研究。

[b]更新


新算法,可能性能会有提升吧,先上代码:

var theString = '';
for (var t = 0; t < 65536; t++) {
theString += String.fromCharCode(t)
}
document.write(theString);


是的!你没有看错!这不是片段!这是所有JS代码!就是只有这几行!

仔细看了一下String对象的文档才知道有String.fromCharCode()这么个神器,具体文档自己搜的啦,哈哈,别喷我懒。不知道性能如何。

本文章系受著作权法保护,未经著作人同意,不得盗用;使用或引用本文章内容请注明作者名、原地址:书中叶http://www.cnblogs.com/libook
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐