读书人

extjs ajaxUTF-8编码变换

发布时间: 2012-10-25 10:58:57 作者: rapoo

extjs ajaxUTF-8编码转换
extjs ajaxUTF-8编码转换
extjs默认使用UTF-8的编码,在服务器端我们经常使用GB2312之类编码.
在网上找了很久,经过测试修改.
实现了在服务器端编码转变.

Function UTF2GB(UTFStr)Dim Dig,GBStrFor 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 FunctionFunction URLEncoding(vstrIn)Dim strReturn,i,innerCode,ThisChr,Hight8,Low8strReturn = ""For i = 1 To Len(vstrIn)ThisChr = Mid(vStrIn,i,1)If Abs(Asc(ThisChr)) < &HFF ThenstrReturn = strReturn & ThisChrElseinnerCode = Asc(ThisChr)If innerCode < 0 TheninnerCode = innerCode + &H10000End IfHight8 = (innerCode And &HFF00)\ &HFFLow8 = innerCode And &HFFstrReturn = strReturn & "%" & Hex(Hight8) & "%" & Hex(Low8)End IfNextURLEncoding = strReturnEnd FunctionFunction ConvChinese(x)Dim A,i,j,DigS,UnicodeA = 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 ThenA(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 IfNextIf Len(c2to16(Unicode)) = 4 ThenConvChinese = ConvChinese & ChrW(Int("&H" & c2to16(Unicode)))ElseConvChinese = ConvChinese & Chr(Int("&H" & c2to16(Unicode)))End IfNextEnd FunctionFunction c2to16(x)Dim ii = 1For i = 1 To Len(x) Step 4c2to16 = c2to16 & Hex(c2to10(Mid(x, i, 4)))NextEnd FunctionFunction c2to10(x)Dim ic2to10 = 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)NextEnd FunctionFunction c16to2(x)Dim i,tempstri = 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)Dim mysign,DigS,tempnum,imysign = Sgn(x)x = Abs(x)DigS = 1DoIf 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"Elsec10to2 = c10to2 & "0"End IfNextIf mysign = -1 Then c10to2 = "-" & c10to2End Function


具体使用方法是:
Name=UTF2GB(URLEncoding(ReplaceBadChar(Trim(Request.QueryString("name")))))
==============================================
一下为编码的测试代码.
asp程序:
<%     Response.Addheader "Content-Type","text/html; charset=gb2312f"Response.Write Server.URLEncode("测试用户")Response.Write "<p>"     Dim s     s="%E6%B5%8B%E8%AF%95%E7%94%A8%E6%88%B7"     Dim d     d="测试用户"     'Response.Write c2Toutf(d)     'Response.Write ConvChinese(s)Function c2Toutf(c2Str)Dim i, temp    For i = 1 To LenB(c2Str)        temp = temp & CStr(MidB(c2Str, i, 1)) & "-"    Nextc2Toutf = tempEnd FunctionFunction ConvChinese(x)Dim A, i, j, DigS, UnicodeA = 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 ThenA(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 IfNextIf Len(c2to16(Unicode)) = 4 ThenConvChinese = ConvChinese & ChrW(Int("&H" & c2to16(Unicode)))ElseConvChinese = ConvChinese & Chr(Int("&H" & c2to16(Unicode)))End IfNextEnd FunctionFunction c2to16(x)Dim ii = 1For i = 1 To Len(x) Step 4c2to16 = c2to16 & Hex(c2to10(Mid(x, i, 4)))NextEnd FunctionFunction c2to10(x)Dim ic2to10 = 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)NextEnd FunctionFunction c16to2(x)Dim i, tempstri = 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)Dim i, DigS, mysign, tempnummysign = Sgn(x)x = Abs(x)DigS = 1DoIf 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"Elsec10to2 = c10to2 & "0"End IfNextIf mysign = -1 Then c10to2 = "-" & c10to2End Function%>

读书人网 >JavaScript

热点推荐