青青子衿, 悠悠我心, 但为君故, 沉吟至今
« Google手机移动SDK发布Godaddy整合Google站长工具 »

中文汉字GB2312和UTF-8的编码转换程序

  在使用Google或者百度进行中文搜索的时候,我们会发现搜索过程中URL地址栏会变成一串格式字符串编码,我们编写程序经常也需要进行中文汉字到这类URL编码的转换,这里介绍两段相关的转换函数。

  对于使用UTF-8的Google搜索引擎来说,使用Google搜索“汉字”会变成http://www.google.com/search?q=%E6%B1%89%E5%AD%97 ,而对于使用GB2312的百度搜索引擎来说,使用百度搜索“汉字”会变成另外的 http://www.baidu.com/s?wd=%BA%BA%D7%D6 。下面的两段VB代码分别针对UTF-8(UTF8EncodeURI)和GB2312(GBKEncodeURI)进行了编码的转换。

    Private Sub command1_click()
        Debug.Print (UTF8EncodeURI("汉字"))
        Debug.Print (GBKEncodeURI("汉字"))
    End Sub


    Function UTF8EncodeURI(szInput)
        Dim wch, uch, szRet
        Dim x
        Dim nAsc, nAsc2, nAsc3

        If szInput = "" Then
            UTF8EncodeURI = szInput
            Exit Function
        End If

        For x = 1 To Len(szInput)
            wch = Mid(szInput, x, 1)
            nAsc = AscW(wch)

            If nAsc < 0 Then nAsc = nAsc + 65536

            If (nAsc And &HFF80) = 0 Then
                szRet = szRet & wch
            Else
                If (nAsc And &HF000) = 0 Then
                    uch = "%" & Hex(((nAsc \ 2 ^ 6)) Or &HC0) & Hex(nAsc And &H3F Or &H80)
                    szRet = szRet & uch
                Else
                    uch = "%" & Hex((nAsc \ 2 ^ 12) Or &HE0) & "%" & _
                    Hex((nAsc \ 2 ^ 6) And &H3F Or &H80) & "%" & _
                    Hex(nAsc And &H3F Or &H80)
                    szRet = szRet & uch
                End If
            End If
        Next

        UTF8EncodeURI = szRet
    End Function

    Function GBKEncodeURI(szInput)
        Dim i As Long
        Dim x() As Byte
        Dim szRet As String

        szRet = ""
        x = StrConv(szInput, vbFromUnicode)
        For i = LBound(x) To UBound(x)
            szRet = szRet & "%" & Hex(x(i))
        Next
        GBKEncodeURI = szRet
    End Function



  除非注明,月光博客文章均为原创,转载请以链接形式标明本文地址

  本文地址:http://www.williamlong.info/archives/1136.html
  • 文章排行:
  • 5.安庆法律人
  • 谁知道怎么转换数据库?
  • 2010/5/1 18:44:11   支持(6)反对(3) 回复
  • 6.不是俺
  • 那个,按住alt敲小键盘上的数字,就能输入ascii码,这个知道吧?比如,alt97=a, alt+98765=佂。这个技巧曾被用来输入无法破解的密码,步骤就是在百度搜索自己的名字,然后把%BA%BA%D7%D6这样的十六进制数转化成十进制数,再用alt输入。这样一次输入的就是两个键盘打不出的字符。
    某一次在论坛上,俺见有人说把qq号如此输入一下玩,于是就想做一个ascii码转字符的程序。
    但是,俺的水平有限,不知道怎么做。vb不认识三位数以上的密码,VC++好像也是把它们都转化成单字符的ascii码,根本无法显示汉字。
    俺用js做了个,结果显示的都是韩国字,估计是因为js使用utf8编码的缘故。估计有了您这个东西,就能正常运作了?
  • 2007/11/14 23:40:00   支持(7)反对(5) 回复
  • 7.welcomyou
  • 用Java就更简单了。就一行
  • 2007/11/15 9:18:26   支持(6)反对(4) 回复
  • 9.linker
  • 以前想过,通过留言本的另存功能,不知道能不能转换这样的编码?呵
  • 2007/11/14 23:11:43   支持(7)反对(6) 回复
  • 10.竞博客
  • 月光,如果做外文网站是不是应该用UTF-8的编码?又或者是UTF-8的编码对于搜索引擎更为友好?谢谢
  • 2007/11/15 9:27:25   支持(9)反对(8) 回复
  • 12.85
  • 用.net system.text 可以直接转换。
    个人比较喜欢utf-8,全球统一编码。gb2312只有中国用。
  • 2007/11/15 10:11:12   支持(5)反对(4) 回复
  • 14.重庆
  • 呵呵。我一般写程序时,直接把汉字用server.encode后直接发送浏览器地址。
  • 2007/11/15 15:36:34   支持(4)反对(3) 回复
  • 15.Heyi
  • 我的一个论坛正准备进行数据转换,从phpwind6.0RC到discuz6.0,正愁编码的问题,哈。
  • 2007/11/16 21:25:10   支持(7)反对(6) 回复
  • 17.yufengfeng
  • 潜水很久了,一不小心坐了个沙发
  • 2007/11/14 22:47:12   支持(7)反对(7) 回复
  • 18.EEFFEE
  • 不错,很实用。---用的时候我会来这里找。。
  • 2007/11/15 1:02:23   支持(5)反对(5) 回复
  • 20.arong
  • 不过,我记得有专门这样的软件,实现非常方便。
  • 2007/11/15 14:06:50   支持(6)反对(6) 回复
  • 23.ititbar
  • 以前对这个还很好奇的,今天月光给解开了
  • 2007/11/15 1:18:49   支持(7)反对(8) 回复
  • 25.yoyo
  • 不错!
    不过我现在不用VB语言了,用类C语言,里面有相关的函数。
  • 2007/11/15 9:07:46   支持(4)反对(6) 回复
  • 30.Null
  • 同LS。看起来这个程序早就有了哦
  • 2007/11/15 8:40:28   支持(7)反对(16) 回复

发表评论:

 请勿发送垃圾信息、广告、推广信息或链接,这样的信息将会被直接删除。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 关注新浪微博:关注新浪微博
  • 关注腾讯微博:关注腾讯微博
  • 关注认证空间:关注QQ空间
  • 通过电子邮件订阅
  • 通过QQ邮件订阅

站内搜索

热文排行


月度排行

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.
This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.