utf-8编码转换成gb2312

时间:2021-05-26

[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]

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章