utf-8编码转换成gb2312
2018-09-06 11:11
[code]<script>
functionchinesefromutf8url(strutf8)
{
varbstr=;
varnoffset=0;
//processingpointonstrutf8
if(strutf8==)
return;
strutf8=strutf8.tolowercase();
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]