utf-8编码转换成gb2312
utf-8编码转换成gb2312
发布时间:2016-12-29 来源:查字典编辑
摘要:[code]functionchinesefromutf8url(strutf8){varbstr="";varnoffset=0;//pr...

[code]<script>

functionchinesefromutf8url(strutf8)

{

varbstr="";

varnoffset=0;

//processingpointonstrutf8

if(strutf8=="")

return"";

strutf8=strutf8.tolowercase();

noffset=strutf8.indexof("%e");

if(noffset==-1)

returnstrutf8;

while(noffset!=-1)

{

bstr+=strutf8.substr(0,noffset);

strutf8=strutf8.substr(noffset,strutf8.length-noffset);

if(strutf8==""¦¦strutf8.length<9)//badstring

returnbstr;

bstr+=utf8codetochinesechar(strutf8.substr(0,9));

strutf8=strutf8.substr(9,strutf8.length-9);

noffset=strutf8.indexof("%e");

}

returnbstr+strutf8;

}

functionunicodefromutf8(strutf8)

{

varbstr="";

varntotalchars=strutf8.length;//totalcharstobeprocessed.

varnoffset=0;//processingpointonstrutf8

varnremainingbytes=ntotalchars;//howmanybyteslefttobeconverted

varnoutputposition=0;

varicode,icode1,icode2;//thevalueoftheunicode.

while(noffset<ntotalchars)

{

icode=strutf8.charcodeat(noffset);

if((icode&0x80)==0)//1byte.

{

if(nremainingbytes<1)//notenoughdata

break;

bstr+=string.fromcharcode(icode&0x7f);

noffset++;

nremainingbytes-=1;

}

elseif((icode&0xe0)==0xc0)//2bytes

{

icode1=strutf8.charcodeat(noffset+1);

if(nremainingbytes<2¦¦//notenoughdata

(icode1&0xc0)!=0x80)//invalidpattern

{

break;

}

bstr+=string.fromcharcode(((icode&0x3f)<<6)¦(icode1&0x3f));

noffset+=2;

nremainingbytes-=2;

}

elseif((icode&0xf0)==0xe0)//3bytes

{

icode1=strutf8.charcodeat(noffset+1);

icode2=strutf8.charcodeat(noffset+2);

if(nremainingbytes<3¦¦//notenoughdata

(icode1&0xc0)!=0x80¦¦//invalidpattern

(icode2&0xc0)!=0x80)

{

break;

}

bstr+=string.fromcharcode(((icode&0x0f)<<12)¦

((icode1&0x3f)<<6)¦

(icode2&0x3f));

noffset+=3;

nremainingbytes-=3;

}

else//4ormorebytes--unsupported

break;

}

if(nremainingbytes!=0)

{

//badutf8string.

return"";

}

returnbstr;

}

functionutf8codetochinesechar(strutf8)

{

varicode,icode1,icode2;

icode=parseint("0x"+strutf8.substr(1,2));

icode1=parseint("0x"+strutf8.substr(4,2));

icode2=parseint("0x"+strutf8.substr(7,2));

returnstring.fromcharcode(((icode&0x0f)<<12)¦

((icode1&0x3f)<<6)¦

(icode2&0x3f));

}

alert(chinesefromutf8url("%e6%b5%8b%e8%af%95"))

</script>[code]

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新ASP教程学习
热门ASP教程学习
编程开发子分类