&#106avascript gb2312转utf-8

汉字标准交换码共分两级。第一级为常用字,有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字节变长编码)

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

时间: 2024-10-23 09:11:57

&#106avascript gb2312转utf-8的相关文章

ASP教程:gb2312和utf

今天做网站的时候,客户要一个博客,于是就利用了本博客所用的程序pjblog.经常做网站的人都知道,在同一个站点里使用不同编码的页面会产生乱码,比较常见的就是gb2312和Utf-8,比如我刚做的网站主站用的gb2312,博客用了utf-8,这样在访问时就出现乱码,以前给百货大楼的网站加一个调查问卷系统,就遇到了这个问题,当时捣鼓了很久才搞定.没想到今天又遇到这个,很欣慰,于是写篇日志记录一下这个方法.其实解决这个问题也很简单.只要在页面的最顶部加上以下代码就可以了. gb2312的页面加<%@L

gb2312和utf

今天做网站的时候,客户要一个博客,于是就利用了本博客所用的程序pjblog. 今天做网站的时候,客户要一个博客,于是就利用了本博客所用的程序pjblog.经常做网站的人都知道,在同一个站点里使用不同编码的页面会产生乱码,比较常见的就是gb2312和Utf-8,比如我刚做的网站主站用的gb2312,博客用了utf-8,这样在访问时就出现乱码,以前给百货大楼的网站加一个调查问卷系统,就遇到了这个问题,当时捣鼓了很久才搞定.没想到今天又遇到这个,很欣慰,于是写篇日志记录一下这个方法.其实解决这个问题也

c++中编译时出现乱码的原因可能有哪些啊??

问题描述 c++中编译时出现乱码的原因可能有哪些啊?? 下面这个程序就是编译时没错误,运行乱码了,问题出在哪啊?求指导 #include #include using namespace std; class Triangle { public: void setABC(double x,double y,double z) { if(zx+y) cout<<"输入错误,请重新输入:"< cin>>x>>y>>z; } void g

asp代理采集的核心函数代码_小偷/采集

Function ProxyPage(url) Set Retrieval = CreateObject("MSXML2.ServerXMLHTTP.5.0") With Retrieval .SetProxy 2 , "255.0.0.0:80" '代理ip:代理端口 .Open "Get", url, False, "", "" .setRequestHeader "Referer"

javascript 将gb2312编码转utf-8编码

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

用javascript实现gb2312转utf-8的脚本_javascript技巧

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

做网站用UTF-8还是GB2312?

经常我们打开外国网站的时候出现乱码,又或者打开很多非英语的外国网站的时候,显示的都是口口口口口的字符, wordpress程序是用的UTF-8,很多cms用的是GB2312. ● 为什么有这么多编码? ● utf-8和GB2312有什么区别? ● 我们在国内做网站是用UTF-8编码格式还是GB2312编码格式好? 一.各种编码的来历 可能很多同学一直对字符的各种编码方式懵懵懂懂,根本搞不清为什么他们有这么多编码 ==========================================

php 判断字符串编码是utf-8 或gb2312实例_php实例

php 判断字符串编码是utf-8 或gb2312 第一种方法: function is_gb2312($str) { for($i=0; $i<strlen($str); $i++) { $v = ord( $str[$i] ); if( $v > 127) { if( ($v >= 228) && ($v <= 233) ) { if( ($i+2) >= (strlen($str) - 1)) return true; // not enough cha

ANSI、UNICODE、UTF-8、GB2312、GBK、DBCS、UCS的区别和由来。

科普一下,自己也学习一下~~~~~       一直对字符的各种编码方式懵懵懂懂,什么ANSI.UNICODE.UTF-8.GB2312.GBK.DBCS.UCS--是不是看的很晕,假如您细细的阅读本文你一定可以清晰的理解他们.Let's go!              很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为"字节".     再后来,他们又做了一些可以处理这些字节的机器,机器开动了,