javascript gb2312转utf-8

2016-02-19 15:37 9 1 收藏

今天给大家分享的是由图老师小编精心为您推荐的javascript gb2312转utf-8,喜欢的朋友可以分享一下,也算是给小编一份支持,大家都不容易啊!

【 tulaoshi.com - Web开发 】

汉字标准交换码共分两级。第一级为常用字,有3755字,按汉语拼音字母顺序排列,第二级为次常用字,有3008字,按部首排列。GB2312的编码范围为2121H-777EH.

UNICODE 是两字节的全编码,对于ASCII字符它也使用两字节表示。代码页是通过高字节的取值范围来确定是ASCII字符,还是汉字的高字节。如果发生数据损坏, 某处内容破坏,则会引起其后汉字的混乱。UNICODE则一律使用两个字节表示一个字符,最明显的好处是它简化了汉字的处理过程。

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

百度的页面是gb2312的,URL编码自然也是从gb转换而来,比如“一”这个字,百度转换的结果是D2%BB,而从Utf-8转换来的结果是%E4%B8%80比如google(gb是2字节编码,utf-8是3字节变长编码)

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

可以用javascript的encodeURI和decodeURI来得到这些结果,设置页面编码就可以看到不同结果了。

在网上找,也没找到现成的转换程序,只得自己写。还好网上不缺gb-utf的对照表,修改了一下就可以用了:gb-utf.txt

这个对照表是将gb字节编码转到utf的16进制编码,而不是字节编码。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

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了,你自己改一下读取路径即可。还需要注意的是,上面的程序是需要在服务器端运行的,因为涉及到文件操作。

来源:http://www.tulaoshi.com/n/20160219/1610046.html

延伸阅读
标签: ASP
  不知道为什么现在各大搜索引擎编码居然不一样.当然不是gb2312就是utf-8了.编码问题是比较头疼的问题...头疼的不要命... 我们获得关键词,一般是通过来访页面的url进行分析的.比如 http://www.google.com/search?hl=zh-CN&q=%E5%AD%A4%E7%8B%AC&lr= 各位肯定知道这个是通过urlencode编码的. 我们得到其中的信息,需要进行2步....
UTF8转换成GB2312 当我们在基于HTTP协议的JSP或Servlet的应用中获取数据或发送请求时,JVM会把输送的数据编码成UTF8格式。如果我们直接从HTTP流中提取中文数据,提取的结果为“????”(可能更多问号),为转换成我们能够理解的中文字符,我们需要把UTF8转换成GB2312,借助ISO-8859-1标准编码能够轻易的实现,下面的代码实现了这一功能: ...
标签: Web开发
用XMLHTTP Post Form时的表单乱码有两方面的原因——Post表单数据时中文乱码;服务器Response被XMLHTTP不正确编码引起的乱码。换句话说,本文主要解决两个问题——怎样正确Post中文内容&怎样正确显示得到的中文内容。 Part I Post中文内容 先看看E文的表单是怎么提交的: 代码如下: SCRIPT language="JavaScrip...
标签: PHP
在《IP地址-地理位置转换的测评》一文中提到用ip2addr函数直接读取IP数据库文件是效率最高的,相比用MySQL数据库存储IP数据,用SQL查询是效率最低的。但是IP数据库文件QQWry.dat是GB2312编码的。现在我需要UTF-8编码的地理位置结果。如果用MySQL方法,可以在数据存入数据库时就转换为UTF-8编码,一劳永逸。但是QQWry.dat文件又无...
标签: Web开发
Javascript 调用UTF-8页面时必须注明调用文档的编码 。例如 Javascript 调用UTF-8页面时必须注明调用文档的编码 。 例如script charset="utf-8" language="javascript" src="文件路径"/script

经验教程

199

收藏

76
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部