时间:2021-05-18
信息交换用汉字编码字符集-基本集
汉字标准交换码共分两级。第一级为常用字,有3755字,按汉语拼音字母顺序排列,第二级为次常用字,有3008字,按部首排列。GB2312的编码范围为2121H-777EH.
UNICODE是两字节的全编码,对于ASCII字符它也使用两字节表示。代码页是通过高字节的取值范围来确定是ASCII字符,还是汉字的高字节。如果发生数据损坏,某处内容破坏,则会引起其后汉字的混乱。UNICODE则一律使用两个字节表示一个字符,最明显的好处是它简化了汉字的处理过程。
关于编码的文章可以参考:
http://blog.iyi.cn/tech/2005/10/unicode_2.html
http://blog.iyi.cn/tech/2005/10/unicode.html
百度的页面是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汉字。
中间那一步最关键,我的转换只用到了这一步,其他两步直接调用那两个函数就可以了。下面是转换程序:
复制代码 代码如下:
functiongenCodeStr(){
varcodeRE=newRegExp("'(.*)':'(.*)'","gi");
vartempStr,codeStr="";
varmyReader=newReader();
myReader.loadFile('inc/gb2312_utf.txt');//这里改成你的对照表存放的路径
while(!myReader.fStream.atEndofLine){
tempStr=newString(myReader.fStream.readLine());
codeStr+=tempStr.replace(codeRE,"$1")+":"+tempStr.replace(codeRE,"$2")+":";
}
Application("codeData")=codeStr;
}
functiongetCodeStr(){
varcodeStr=newString(Application("codeData"));
if(codeStr.indexOf("%a1%a1")==-1){
genCodeStr();
}
returnnewString(Application("codeData"));
}
functiongb2utf(gbStr){
varcodeStr=getCodeStr();
varcodeRE=newRegExp("(%..%..)","gi");
varreplaceRE=newRegExp("(%..%..)","i");
vargbCode;
varutfCode;
vargbStart;
while((codeRE.lastIndex<gbStr.length)&&replaceRE.test(gbStr)){
codeRE.exec(gbStr);
gbCode=newString(RegExp.$1);
gbStart=newNumber(codeStr.indexOf(gbCode.toLowerCase()));
varutfStart=0;
if(gbStart!=-1){
utfStart=gbStart+7;
utfCode=codeStr.substring(utfStart,utfStart+6);
}else{
utfCode="%u3000";
}
gbStr=gbStr.replace(replaceRE,utfCode);
}
returngbStr;
}
functionReader(){//ClassReader()
this.fso;//Privatefso
this.fUri;//PrivatefUri
this.fStream;//PrivatefStream
try{
this.fso=newActiveXObject("Scripting.FileSystemObject");
}catch(exception){
throwexception;
}
this.loadFile=function(file){//PublicloadFile(file)
this.fUri=Server.mappath(file);
//varfStream=fso.CreateTextFile(tfolder,true,false);
//fStream.WriteLine('test');
if(this.fso.fileExists(this.fUri)){
this.fStream=this.fso.openTextFile(this.fUri);
}else{
Response.write('filedosnotexist');
}
}
this.readLineN=function(num){
vari=1;
while(i<num&&!this.fStream.atEndOfLine){
this.fStream.skipLine();
i++
}
returnthis.fStream.readLine();
}
this.closeFile=function(){
fStream.Close();
fso.Close;
}
}
对照表就是gb-utf.txt了,你自己改一下读取路径即可。
还需要注意的是,上面的程序是需要在服务器端运行的,因为涉及到文件操作。
javascript客户端程序请看
[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
复制代码代码如下://截取字符串长度。支持utf-8和gb2312编码。若为gb2312,先将其转为utf-8,在utf-8的基础上截取然后再转换回来funct
我们在编辑DreamWeaver文档时,如果原来是utf-8编码的,改成gb2312编码文档或由gb2312改成utf-8编码的文档,里面的汉字或非英文字符就会
最近有好多学生问我网页的编码问题,gb2312和utf-8编码有什么区别呢?今天总结下。最近有好多学生问我网页的编码问题,gb2312和utf-8编码有什么区别
常用HTML编码之urf-8编码转换为gb2312编码或者gb2312转换为utf-8编码快速转换设置,这里pCSS5介绍使用DW软件快速转换转化设置教程。HT
若需要utf-8格式,请自行将下面的GB2312改成utf-8。'二进制转字符串,否则会出现乱码的!FunctionsTb(vin)ConstadTypeTex