关于网上流行的ASP版GB2312转UTF-8 函数的错误修正!
来源:互联网 发布:ubuntu安装qemu 编辑:程序博客网 时间:2024/05/16 01:46
同样的文章我已经发到蓝色理想:http://bbs.blueidea.com/thread-3060231-1-1.html
原函数出处:http://www.blueidea.com/tech/program/2006/3538.asp
感谢作者发出来这个函数,但是发现这个函数有个小错误:
如果需要转换的字符串都是汉字就没问题。但是如果遇到中间有数字或字母的时候就会被截断,而得不到正确的结果。
比如:GB2UTF("中国人")可以得到正确得到转换。
但是:GB2UTF("中国人3chinese!")就会得到“中国人5”
不但被截断,而且第一个数字还对应不上。
虽然是个小小的错误,但是可能会给新手造成误导!
为了不再让大家浪费时间查找错误,特将错误的版本和正确的版本贴上以便学习者进行对比!
网上流行存在错误的版本:
Function U2UTF8(Byval a_iNum) Dim sResult,sUTF8 Dim iTemp,iHexNum,i iHexNum = Trim(a_iNum) If iHexNum = "" Then Exit Function End If sResult = "" If (iHexNum < 128) Then sResult = sResult & iHexNum ElseIf (iHexNum < 2048) Then sResult = ChrB(&H80 + (iHexNum And &H3F)) iHexNum = iHexNum \ &H40 sResult = ChrB(&HC0 + (iHexNum And &H1F)) & sResult ElseIf (iHexNum < 65536) Then sResult = ChrB(&H80 + (iHexNum And &H3F)) iHexNum = iHexNum \ &H40 sResult = ChrB(&H80 + (iHexNum And &H3F)) & sResult iHexNum = iHexNum \ &H40 sResult = ChrB(&HE0 + (iHexNum And &HF)) & sResult End If U2UTF8 = sResultEnd FunctionFunction GB2UTF(Byval a_sStr) Dim sGB,sResult,sTemp Dim iLen,iUnicode,iTemp,i sGB = Trim(a_sStr) iLen = Len(sGB) For i = 1 To iLen sTemp = Mid(sGB,i,1) iTemp = Asc(sTemp) If (iTemp>127 OR iTemp<0) Then iUnicode = AscW(sTemp) If iUnicode<0 Then iUnicode = iUnicode + 65536 End If Else iUnicode = iTemp End If sResult = sResult & U2UTF8(iUnicode) Next GB2UTF = sResultEnd FunctionResponse.Write(GB2UTF("冥蝶"))’可以得到正确结果Response.Write(GB2UTF("冥蝶308641836"))’得到:冥蝶5,结果错误!
修改之后的版本:
Function U2UTF8(Byval a_iNum) Dim sResult,sUTF8 Dim iTemp,iHexNum,i iHexNum = Trim(a_iNum) If iHexNum = "" Then Exit Function End If sResult = "" If (iHexNum < 128) Then sResult = sResult & ChrB(iHexNum) ElseIf (iHexNum < 2048) Then sResult = ChrB(&H80 + (iHexNum And &H3F)) iHexNum = iHexNum \ &H40 sResult = ChrB(&HC0 + (iHexNum And &H1F)) & sResult ElseIf (iHexNum < 65536) Then sResult = ChrB(&H80 + (iHexNum And &H3F)) iHexNum = iHexNum \ &H40 sResult = ChrB(&H80 + (iHexNum And &H3F)) & sResult iHexNum = iHexNum \ &H40 sResult = ChrB(&HE0 + (iHexNum And &HF)) & sResult End If U2UTF8 = sResultEnd FunctionFunction GB2UTF(Byval a_sStr) Dim sGB,sResult,sTemp Dim iLen,iUnicode,iTemp,i sGB = Trim(a_sStr) iLen = Len(sGB) For i = 1 To iLen sTemp = Mid(sGB,i,1) iTemp = Asc(sTemp) If (iTemp>127 OR iTemp<0) Then iUnicode = AscW(sTemp) If iUnicode<0 Then iUnicode = iUnicode + 65536 End If Else iUnicode = iTemp End If sResult = sResult & U2UTF8(iUnicode) Next GB2UTF = sResultEnd FunctionResponse.Write(GB2UTF("冥蝶"))’可以得到正确结果Response.Write(GB2UTF("冥蝶308641836"))’得到:冥蝶308641836,结果不再被截断!
本文代码只供学习研究!
发表人:冥蝶 2012年5月11日
- 关于网上流行的ASP版GB2312转UTF-8 函数的错误修正!
- ASP UTF-8页面乱码+GB2312转UTF-8 +生成UTF-8格式的文件(编码)<
- 关于GB2312与UTF-8的转换
- [asp]GB2312转UTF-8
- ASP写的汉字转换UTF-8及UTF-8转GB2312
- ASP写的汉字转换UTF-8及UTF-8转GB2312
- ASP写的汉字转换UTF-8及UTF-8转GB2312
- UTF-8转GB2312函数
- UTF-8转GB2312函数
- UTF-8转GB2312函数
- ASP动态网页下UTF-8页面乱码+GB2312转UTF-8 +生成UTF-8格式的文件(编码)
- ASP.NET自动识别GB2312与UTF-8编码的文件
- "gb2312", "utf-8”的区别
- 关于Weblogic GBK/GB2312/UTF-8乱码的问题
- 关于ZendStudio网页编码UTF-8和GB2312的问题
- 关于字符集的专题知识 UTF-8 GB2312 UNICODE
- 关于ZendStudio网页编码UTF-8和GB2312的问题
- 关于编码ansi、GB2312、unicode与utf-8的区别
- 【就你不知道-Java 标识接口】
- Android中的Adapter 详解(二)
- JS Date格式化为yyyy-MM-dd类字符串
- 和平之莲
- 经典语句94
- 关于网上流行的ASP版GB2312转UTF-8 函数的错误修正!
- 强连通缩点
- 鸭子-策略模式(Strategy Pattern)
- Java基础之常用集合及排序
- Android游戏开发系统控件-ProgressBar
- Mini2440 NAND FLASH驱动
- VC中如何改变对框中控件的颜色
- Linux 下$PATH环境变量修改
- Linux Crontab 详解