国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 網(wǎng)站 > WEB開發(fā) > 正文

javascript gb2312轉(zhuǎn)utf-8

2024-04-27 13:55:57
字體:
供稿:網(wǎng)友

漢字標(biāo)準(zhǔn)交換碼共分兩級(jí)。第一級(jí)為常用字,有3755字,按漢語(yǔ)拼音字母順序排列,第二級(jí)為次常用字,有3008字,按部首排列。GB2312的編碼范圍為2121H-777EH.

UNICODE 是兩字節(jié)的全編碼,對(duì)于ASCII字符它也使用兩字節(jié)表示。代碼頁(yè)是通過高字節(jié)的取值范圍來確定是ASCII字符,還是漢字的高字節(jié)。如果發(fā)生數(shù)據(jù)損壞, 某處內(nèi)容破壞,則會(huì)引起其后漢字的混亂。UNICODE則一律使用兩個(gè)字節(jié)表示一個(gè)字符,最明顯的好處是它簡(jiǎn)化了漢字的處理過程。

關(guān)于編碼的文章可以參考:


百度的頁(yè)面是gb2312的,URL編碼自然也是從gb轉(zhuǎn)換而來,比如“一”這個(gè)字,百度轉(zhuǎn)換的結(jié)果是D2%BB,而從Utf-8轉(zhuǎn)換來的結(jié)果是%E4%B8%80比如google(gb是2字節(jié)編碼,utf-8是3字節(jié)變長(zhǎng)編碼)

可以用javascript的encodeURI和decodeURI來得到這些結(jié)果,設(shè)置頁(yè)面編碼就可以看到不同結(jié)果了。

在網(wǎng)上找,也沒找到現(xiàn)成的轉(zhuǎn)換程序,只得自己寫。還好網(wǎng)上不缺gb-utf的對(duì)照表,修改了一下就可以用了:gb-utf.txt

這個(gè)對(duì)照表是將gb字節(jié)編碼轉(zhuǎn)到utf的16進(jìn)制編碼,而不是字節(jié)編碼。

Javascript中escape和unescape是轉(zhuǎn)換16進(jìn)制編碼用的,因此gb漢字到utf漢字的轉(zhuǎn)換思路是:encodeURI("gb漢字"),到對(duì)照表中查找utf的16進(jìn)制編碼,unescape("16進(jìn)制utf編碼"),得到utf漢字。

中間那一步最關(guān)鍵,我的轉(zhuǎn)換只用到了這一步,其他兩步直接調(diào)用那兩個(gè)函數(shù)就可以了。下面是轉(zhuǎn)換程序:

 

 function genCodeStr(){
    var codeRE = new RegExp("'(.*)' : '(.*)'","gi");
    var tempStr,codeStr = "";
    var myReader = new Reader();
    myReader.loadFile('inc/gb2312_utf.txt');//這里改成你的對(duì)照表存放的路徑
    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;
    }
}


對(duì)照表就是gb-utf.txt了,你自己改一下讀取路徑即可。
還需要注意的是,上面的程序是需要在服務(wù)器端運(yùn)行的,因?yàn)樯婕暗轿募僮鳌?/P>

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 沂源县| 鸡东县| 巫溪县| 平顺县| 北川| 贵南县| 唐海县| 麻栗坡县| 高唐县| 阿鲁科尔沁旗| 平果县| 龙井市| 南投县| 临泉县| 通辽市| 乌拉特前旗| 江都市| 晋州市| 南木林县| 雷山县| 青州市| 双桥区| 大英县| 锦屏县| 镇沅| 富阳市| 鄂尔多斯市| 兰州市| 平原县| 太湖县| 确山县| 阳城县| 清原| 观塘区| 德格县| 象山县| 吉林市| 衡阳市| 梁山县| 思南县| 车险|