学习网考试学习资料

Gzu521.com

javascript gb2312转utf-8

Javascript教程   点击:次   发布时间:2006-9-9   【字体: 】   来源:Gzu521.com
GZU521.COM学习网
汉字标准交换码共分两级。第一级为常用字,有3755字,按汉语拼音字母顺序排列,第二级为次常用字,有3008字,按部首排列。gb2312的编码范围为2121h-777eh. 
/q6.r{Xu[转 贴 于 我 的 学 习 网 网页设计Javascript教程 HTtp://wwW.gzU521.coM)/q6.r{Xu
unicode 是两字节的全编码,对于ascii字符它也使用两字节表示。代码页是通过高字节的取值范围来确定是ascii字符,还是汉字的高字节。如果发生数据损坏, 某处内容破坏,则会引起其后汉字的混乱。unicode则一律使用两个字节表示一个字符,最明显的好处是它简化了汉字的处理过程。 

关于编码的文章可以参考: 


百度的页面是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’); 
            } 
    }  \b*t *SK[此 资 料 转 贴 于 学 习 网 网页设计Javascript教程HtTp://WwW.GzU521.CoM]\b*t *SK
    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了,你自己改一下读取路径即可。 
还需要注意的是,上面的程序是需要在服务器端运行的,因为涉及到文件操作。 

责任编辑:gzu521

网页设计分类
HTML教程
CSS教程
Javascript教程
Dreamweaver教程
FrontPages教程
FireWorks教程
Flash教程
PhotoShop教程
建站知识
分类推荐信息
更多...
大类最新文章
更多...