function utf2gb(utfstr)for dig=1 to len(utfstr)if mid(utfstr,dig,1)="%" thenif len(utfstr) >= dig+8 thengbstr=gbstr & convchinese(mid(utfstr,dig,9))dig=dig+8elsegbstr=gbstr & mid(utfstr,dig,1)end ifelsegbstr=gbstr & mid(utfstr,dig,1)end ifnextutf2gb=gbstrend function function convchinese(x) a=split(mid(x,2),"%")i=0j=0for i=0 to ubound(a) a(i)=c16to2(a(i))nextfor i=0 to ubound(a)-1digs=instr(a(i),"0")unicode=""for j=1 to digs-1if j=1 then a(i)=right(a(i),len(a(i))-digs)unicode=unicode & a(i)elsei=i+1a(i)=right(a(i),len(a(i))-2)unicode=unicode & a(i) end if nextif len(c2to16(unicode))=4 thenconvchinese=convchinese & chrw(int("&h" & c2to16(unicode)))elseconvchinese=convchinese & chr(int("&h" & c2to16(unicode)))end ifnextend functionfunction c2to16(x)i=1for i=1 to len(x) step 4 c2to16=c2to16 & hex(c2to10(mid(x,i,4))) nextend function function c2to10(x)c2to10=0if x="0" then exit functioni=0for i= 0 to len(x) -1if mid(x,len(x)-i,1)="1" then c2to10=c2to10+2^(i)next end functionfunction c16to2(x)i=0for i=1 to len(trim(x)) tempstr= c10to2(cint(int("&h" & mid(x,i,1))))do while len(tempstr)<4tempstr="0" & tempstrloopc16to2=c16to2 & tempstrnextend functionfunction c10to2(x)mysign=sgn(x)x=abs(x)digs=1do if x<2^digs thenexit doelsedigs=digs+1end iflooptempnum=xi=0for i=digs to 1 step-1if tempnum>=2^(i-1) thentempnum=tempnum-2^(i-1)c10to2=c10to2 & "1"
else
c10to2=c10to2 & "0"
end if
next
if mysign=-1 then c10to2="-" & c10to2end function
else
c10to2=c10to2 & "0"
end if
next
if mysign=-1 then c10to2="-" & c10to2end function
用记事本打开,另存为,编码选择ANSI就可以了.
function chinesefromutf8url(strutf8)
{
var bstr = "";
var noffset = 0;
// processing point on strutf8
if (strutf8 == "")
return "";
strutf8 = strutf8.tolowercase();
noffset = strutf8.indexof("%e");
if (noffset == -1)
return strutf8;
while (noffset != -1)
{
bstr += strutf8.substr(0, noffset);
strutf8 = strutf8.substr(noffset, strutf8.length - noffset);
if (strutf8 == "" || strutf8.length < 9) // bad string
return bstr;
bstr += utf8codetochinesechar(strutf8.substr(0, 9));
strutf8 = strutf8.substr(9, strutf8.length - 9);
noffset = strutf8.indexof("%e");
}
return bstr + strutf8;
}
function unicodefromutf8(strutf8)
{
var bstr = "";
var ntotalchars = strutf8.length; // total chars to be processed.
var noffset = 0; // processing point on strutf8
var nremainingbytes = ntotalchars; // how many bytes left to be converted
var noutputposition = 0;
var icode, icode1, icode2; // the value of the unicode.
while (noffset < ntotalchars)
{
icode = strutf8.charcodeat(noffset);
if ((icode & 0x80) == 0) // 1 byte.
{
if ( nremainingbytes < 1 ) // not enough data
break;
bstr += string.fromcharcode(icode & 0x7f);
noffset++;
nremainingbytes -= 1;
}
else if ((icode & 0xe0) == 0xc0) // 2 bytes
{
icode1 = strutf8.charcodeat(noffset + 1);
if ( nremainingbytes < 2 || (icode1 & 0xc0) != 0x80 ) // invalid pattern
{
break;
}
bstr += string.fromcharcode(((icode & 0x3f) << 6) | ( icode1 & 0x3f));
noffset += 2;
nremainingbytes -= 2;
}
else if ((icode & 0xf0) == 0xe0) // 3 bytes
{
icode1 = strutf8.charcodeat(noffset + 1);
icode2 = strutf8.charcodeat(noffset + 2);
if ( nremainingbytes < 3 || // not enough data
(icode1 & 0xc0) != 0x80 || // invalid pattern
(icode2 & 0xc0) != 0x80 )
{
break;
}
bstr += string.fromcharcode(((icode & 0x0f) << 12) | ((icode1 & 0x3f) << 6) | (icode2 & 0x3f));
noffset += 3;
nremainingbytes -= 3;
}
else // 4 or more bytes -- unsupported
break;
}
if (nremainingbytes != 0)
{
// bad utf8 string.
return "";
}
return bstr;
}
function utf8codetochinesechar(strutf8)
{
var icode, icode1, icode2;
icode = parseint("0x" + strutf8.substr(1, 2));
icode1 = parseint("0x" + strutf8.substr(4, 2));
icode2 = parseint("0x" + strutf8.substr(7, 2));
return string.fromcharcode(((icode & 0x0f) << 12) | ((icode1 & 0x3f) << 6) | (icode2 & 0x3f));
}
alert(chinesefromutf8url("%e6%b5%8b%e8%af%95"))
function chinesefromutf8url(strutf8)
{
var bstr = "";
var noffset = 0;
// processing point on strutf8
if (strutf8 == "")
return "";
strutf8 = strutf8.toLowerCase();
noffset = strutf8.indexOf("%e");
if (noffset == -1)
return strutf8;
while (noffset != -1)
{
bstr += strutf8.substr(0, noffset);
strutf8 = strutf8.substr(noffset, strutf8.length - noffset);
if (strutf8 == "" || strutf8.length < 9) // bad string
return bstr;
bstr += utf8codetochinesechar(strutf8.substr(0, 9));
strutf8 = strutf8.substr(9, strutf8.length - 9);
noffset = strutf8.indexOf("%e");
}
return bstr + strutf8;
}
function unicodefromutf8(strutf8)
{
var bstr = "";
var ntotalchars = strutf8.length; // total chars to be processed.
var noffset = 0; // processing point on strutf8
var nremainingbytes = ntotalchars; // how many bytes left to be converted
var noutputposition = 0;
var icode, icode1, icode2; // the value of the unicode.
while (noffset < ntotalchars)
{
icode = strutf8.charcodeat(noffset);
if ((icode & 0x80) == 0) // 1 byte.
{
if ( nremainingbytes < 1 ) // not enough data
break;
bstr += string.fromcharcode(icode & 0x7f);
noffset++;
nremainingbytes -= 1;
}
else if ((icode & 0xe0) == 0xc0) // 2 bytes
{
icode1 = strutf8.charcodeat(noffset + 1);
if ( nremainingbytes < 2 || (icode1 & 0xc0) != 0x80 ) // invalid pattern
{
break;
}
bstr += string.fromcharcode(((icode & 0x3f) << 6) | ( icode1 & 0x3f));
noffset += 2;
nremainingbytes -= 2;
}
else if ((icode & 0xf0) == 0xe0) // 3 bytes
{
icode1 = strutf8.charcodeat(noffset + 1);
icode2 = strutf8.charcodeat(noffset + 2);
if ( nremainingbytes < 3 || // not enough data
(icode1 & 0xc0) != 0x80 || // invalid pattern
(icode2 & 0xc0) != 0x80 )
{
break;
}
bstr += string.fromcharcode(((icode & 0x0f) << 12) | ((icode1 & 0x3f) << 6) | (icode2 & 0x3f));
noffset += 3;
nremainingbytes -= 3;
}
else // 4 or more bytes -- unsupported
break;
}
if (nremainingbytes != 0)
{
// bad utf8 string.
return "";
}
return bstr;
}
function utf8codetochinesechar(strutf8)
{
var icode, icode1, icode2;
icode = parseInt("0x" + strutf8.substr(1, 2));
icode1 = parseInt("0x" + strutf8.substr(4, 2));
icode2 = parseInt("0x" + strutf8.substr(7, 2));
return String.fromCharCode(((icode & 0x0f) << 12) | ((icode1 & 0x3f) << 6) | (icode2 & 0x3f));
}
alert(chinesefromutf8url("%e6%b5%8b%e8%af%95"))
终于自己解决了
我在动态加载的时候,重新指定了个编码utf_8