utf-8转换gb2312问题

dadaiedadaie 2007-05-11 12:00:22
在写asp网页时,获得一个值赋给参数 Subject,页面定义为gb2312,使用response.write Subject,页面显示出现乱码,如下:“銆婂井杞妧鏈腑蹇冨懆浜旇鍧涖€嬭绋”。
如果使用UTF-8查看,则可以正常显示汉字。请问,在获取这个值的时候,要经过怎么处理,才能在gb2312的页面中正常显示?有使用了如下函数转换:
function UTF2GB(UTFStr)

for Dig=1 to len(UTFStr)
if mid(UTFStr,Dig,1)="%" then
if len(UTFStr) >= Dig+8 then
GBStr=GBStr & ConvChinese(mid(UTFStr,Dig,9))
Dig=Dig+8
else
GBStr=GBStr & mid(UTFStr,Dig,1)
end if
else
GBStr=GBStr & mid(UTFStr,Dig,1)
end if
next
UTF2GB=GBStr
end function
但是这句“if mid(UTFStr,Dig,1)="%" then”无法执行进去,应该是没有“%”的原因。
请问,该怎么处理?
...全文
452 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wtogether 2007-05-14
  • 打赏
  • 举报
回复
msg.Charset可以判断的,如果没有指定,那就是本地字符集
mrshelly 2007-05-14
  • 打赏
  • 举报
回复
http://www.google.cn/search?complete=1&hl=zh-CN&q=adodb.stream+%E7%BC%96%E7%A0%81&btnG=Google+%E6%90%9C%E7%B4%A2&meta=&aq=t
mrshelly 2007-05-14
  • 打赏
  • 举报
回复
ADODB.Stream 好象可以转码.你GOOGLE一下.
dadaiedadaie 2007-05-14
  • 打赏
  • 举报
回复
楼上的这个方法果然可以实现转换,而且是缺一个字符。顺便问一下,因为是用jmail收取,而且乱码并不是所有的邮件,只是部分。要怎么样判断是属于乱码,还是正常汉字?
wtogether 2007-05-11
  • 打赏
  • 举报
回复
有个暂时的办法,不过用String存储UTF-8编码,当汉字是单数时,会造成最后一个字节丢失,因为汉字的UTF-8编码占用3个字节,而String是2个字节

调用方法:Response.Write UTF8ToASC(String)

'lValue左移iBits字节
Public Function LShift(ByVal lValue, ByVal iBits)
LShift = lValue * (2 ^ iBits)
End Function

'String转换成字节数组
Private Function StringToArray(ByVal strData)
Dim ret
Dim i, k, l
Dim u
l = Len(strData)
k = 0
ReDim ret(l * 2)
For i = 1 To l
u = Asc(Mid(strData, i, 1)) And &HFFFF&
If u < 128 Then
ret(k) = u
Else
ret(k) = u \ (2 ^ 8)
k = k + 1
ret(k) = u And &HFF
End If
k = k + 1
Next
ReDim Preserve ret(k - 1)
StringToArray = ret
End Function

'根据首字节判断UTF字节长度
Private Function UTF8Bytes(ByVal u)
If u > &H00 And u <= &H7F Then
UTF8Bytes = 1
ElseIf u >= &HC0 And u <= &HDF Then
UTF8Bytes = 2
ElseIf u >= &HE0 And u <= &HEF Then
UTF8Bytes = 3
ElseIf u >= &HF0 And u <= &HF7 Then
UTF8Bytes = 4
ElseIf u >= &HF8 And u <= &HFB Then
UTF8Bytes = 5
ElseIf u >= &HFC And u <= &HFD Then
UTF8Bytes = 6
Else
UTF8Bytes = 0
End If
End Function

'UTF8 String转本地字符集 String
Public Function UTF8ToASC(ByVal strData)
Dim arr
Dim i, l, u
Dim ret
arr = StringToArray(strData)
l = UBound(arr)
For i = 0 To l
Select Case UTF8Bytes(arr(i))
Case 1
u = arr(i)
Case 2
If i + 1 > l Then Exit For
u = LShift(arr(i + 0) And &H3F, 6) Or _
LShift(arr(i + 1) And &H3F, 0)
i = i + 1
Case 3
If i + 2 > l Then Exit For
u = LShift(arr(i + 0) And &H0F, 12) Or _
LShift(arr(i + 1) And &H3F, 6) Or _
LShift(arr(i + 2) And &H3F, 0)
i = i + 2
Case Else
Exit For
End Select
ret = ret & ChrW(u)
Next
UTF8ToASC = ret
End Function
dadaiedadaie 2007-05-11
  • 打赏
  • 举报
回复
试过了,不行。。。。
wtogether 2007-05-11
  • 打赏
  • 举报
回复
msg有个Charset属性,设置msg.Charset = "gb2312",然后取msg.Subject出来试试
dadaiedadaie 2007-05-11
  • 打赏
  • 举报
回复
我是用jmail收邮件收到的。set pop3 = server.createobje();pop3.connect(name,pwd,server); set msg = pop3.messages.item(0); Subject = msg.Subject;
wtogether 2007-05-11
  • 打赏
  • 举报
回复
[获得一个值]是怎么获取的?Request.QueryString还是Request.Form?

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧