分享
 
 
 

javascript gb2312转utf-8

王朝html/css/js·作者佚名  2008-05-30
窄屏简体版  字體: |||超大  

汉字标准交换码共分两级。第一级为常用字,有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了,你自己改一下读取路径即可。

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有