Javascript输出所有Unicode字符
2014-02-27 14:28
1601 查看
不说废话,直接上源代码:
简单解释一下。Javascript中的Unicode字符可以用“\u”后面加4位十六进制数字来表示,这实际上也是一种转义字符,也就是说我上面的程序只是遍历输出‘\u0000’~‘\uffff’,所以就输出了所有Unicode字符。
需要注意的一点是,我们一般的思路都是循环向变量里先存入"\u",再生成一个四位的十六进制数字继续存入变量,如代码:
但是事实情况是不能直接往变量里存“\u”,因为这样会被认为"\u"是一个非法的Unicode字符而导致JS代码报错;我的解决方案是使用转义字符'\\'来存入'\',如代码:
我们都知道,转义字符如'\t'在程序中会被认为是一个字符,那么如'\u89ab'这样的转义字符在程序中也应该是被认为是一个字符的,可我们现在内存中的"\u89ab"不是一个字符,而是6个字符,这样直接输出的话页面中只会原样显示"\u89ab",显然不是我们想要的那个字符,怎么办呢?很简单,使用Javascript自带的eval方法可以将字符串作为Javascript代码重新执行一遍,具体用法自己搜,重新执行的时候由于是一次性解析'\u89ab'这个数据,所以可以正确识别为一个Unicode转义字符,也就可以正确输出这个Unicode字符了。
表达能力有限,我已经努力用详细的语言来解释了,不过觉得还是有点不好理解。一层窗户纸,一筒就破。
其实我觉得另外一种算法性能更好一些,就是直接输入Unicode字符到变量中,不用使用eval转化就可以直接输出,在这抛砖引玉了,有待进一步研究。
[b]更新
新算法,可能性能会有提升吧,先上代码:
是的!你没有看错!这不是片段!这是所有JS代码!就是只有这几行!
仔细看了一下String对象的文档才知道有String.fromCharCode()这么个神器,具体文档自己搜的啦,哈哈,别喷我懒。不知道性能如何。
本文章系受著作权法保护,未经著作人同意,不得盗用;使用或引用本文章内容请注明作者名、原地址:书中叶http://www.cnblogs.com/libook
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
相关文章推荐
- Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示
- (本程序功能:字符串A中找出包含字符串B中所有字符的位置并输出) 在使用全局变量m的时候,输出错误的结果,而用下面局部变量M就没问题。
- javascript:中文等字符转成unicode
- 根据Unicode编码输出字符
- javascript字符串替换所有要替换字符
- 允许Python文档中显示中文 & 允许SublimeText2输入中文 & 允许Python输出unicode字符
- 输入一个字符串,输出该字符串中字符的所有组合 C#【总结】
- javascript字符串替换所有要替换字符
- javascript:中文等字符转成unicode
- 多字节字符与Unicode互转,JavaScript实现
- JavaScript 实现字符与unicode编码的相互转换
- 亚马逊面试:输出字符串中所有最长的无重复字符的子字符串
- 输入一个字符串,输出该字符串中字符的所有组合
- javascript使用replace替换字符串中所有字符
- 编写函数fun(char *s),其功能是:把字符串中所有字符前移一个位置,串中的第1个字符移到最后。 例如,若输入字符串为:ABC123xyz ,则应输出字符串: BC123xyzA 。
- 任意数字、字符序列,输出它们所有的排列组合
- Javascript正则表达式把所有空格替换为指定字符
- javascript实现unicode和字符的互相转换
- JavaScript利用replace更改所有符合条件字符
- 反序输出一个int型数组中所有数组元素(数字或字符)的值