发布于 2016-08-28 05:13:23 | 354 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的Javascript教程,程序狗速度看过来!

JavaScript客户端脚本语言

Javascript 是一种由Netscape的LiveScript发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如Perl,遗留的速度问题,为客户提供更流畅的浏览效果。



信息交换用汉字编码字符集-基本集
汉字标准交换码共分两级。第一级为常用字,有3755字,按汉语拼音字母顺序排列,第二级为次常用字,有3008字,按部首排列。GB2312的编码范围为2121H-777EH.
UNICODE 是两字节的全编码,对于ASCII字符它也使用两字节表示。代码页是通过高字节的取值范围来确定是ASCII字符,还是汉字的高字节。如果发生数据损坏, 某处内容破坏,则会引起其后汉字的混乱。UNICODE则一律使用两个字节表示一个字符,最明显的好处是它简化了汉字的处理过程。
关于编码的文章可以参考:
http://blog.iyi.cn/tech/2005/10/unicode_2.html
http://blog.iyi.cn/tech/2005/10/unicode.html

百度的页面是gb2312的,URL编码自然也是从gb转换而来,比如“一”这个字,百度转换的结果是D2%BB,而从Utf-8转换来的结果是%E4%B8%80比如google(gb是2字节编码,utf-8是3字节变长编码)
可以用javascript的encodeURI和decodeURI来得到这些结果,设置页面编码就可以看到不同结果了。
在网上找,也没找到现成的转换程序,只得自己写。还好网上不缺gb-utf的对照表,修改了一下就可以用了:gb-utf.txt
这个对照表是将gb字节编码转到utf的16进制编码,而不是字节编码。
javascript中escape和unescape是转换16进制编码用的,因此gb汉字到utf汉字的转换思路是:encodeURI("gb汉字"),到对照表中查找utf的16进制编码,unescape("16进制utf编码"),得到utf汉字。
中间那一步最关键,我的转换只用到了这一步,其他两步直接调用那两个函数就可以了。下面是转换程序: 
 

function genCodeStr(){  
    var codeRE = new RegExp("'(.*)' : '(.*)'","gi");  
    var tempStr,codeStr = "";  
    var myReader = new Reader();  
    myReader.loadFile('inc/gb2312_utf.txt');//这里改成你的对照表存放的路径  
    while(!myReader.fStream.atEndofLine) {  
        tempStr = new String(myReader.fStream.readLine());  
        codeStr += tempStr.replace(codeRE,"$1") + ":" + tempStr.replace(codeRE,"$2") + ":";  
    }  
    Application("codeData") = codeStr;  
}  
function getCodeStr(){  
    var codeStr = new String(Application("codeData"));  
    if(codeStr.indexOf("%a1%a1") == -1){  
        genCodeStr();  
    }  
    return new String(Application("codeData"));  
}  
function gb2utf(gbStr){  
    var codeStr = getCodeStr();  
    var codeRE = new RegExp("(%..%..)","gi");  
    var replaceRE = new RegExp("(%..%..)","i");  
    var gbCode;  
    var utfCode;  
    var gbStart;  
    while((codeRE.lastIndex < gbStr.length) && replaceRE.test(gbStr)){  
        codeRE.exec(gbStr);  
        gbCode = new String(RegExp.$1);  
        gbStart = new Number(codeStr.indexOf(gbCode.toLowerCase()));  
        var utfStart = 0;  
        if(gbStart != -1){  
            utfStart= gbStart + 7;  
            utfCode = codeStr.substring(utfStart,utfStart + 6);  
        }else{  
            utfCode = "%u3000";  
        }  
        gbStr = gbStr.replace(replaceRE,utfCode);  
    }  
    return gbStr;  
}  
function Reader() {                        //Class        Reader()  
    this.fso;                            //Private    fso  
    this.fUri;                            //Private    fUri  
    this.fStream;                        //Private    fStream  
    try{  
        this.fso = new ActiveXObject("Scripting.FileSystemObject");  
    }catch(exception) {  
        throw exception;  
    }  
    this.loadFile = function(file) {        //Public        loadFile(file)  
            this.fUri = Server.mappath(file);  
            //var fStream = fso.CreateTextFile(tfolder,true,false);  
            //fStream.WriteLine('test');  
            if(this.fso.fileExists(this.fUri)){  
                this.fStream = this.fso.openTextFile(this.fUri);  
            }else{  
                Response.write('file dos not exist');  
            }  
    }  
    this.readLineN = function(num) {  
        var i = 1;  
        while(i < num && !this.fStream.atEndOfLine) {  
            this.fStream.skipLine();  
            i++  
        }  
        return this.fStream.readLine();  
    }  
    this.closeFile = function() {  
        fStream.Close();  
        fso.Close;  
    }  
}  

对照表就是gb-utf.txt了,你自己改一下读取路径即可。

还需要注意的是,上面的程序是需要在服务器端运行的,因为涉及到文件操作。
javascript客户端程序请看

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]



最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务