月光博客

青青子衿, 悠悠我心, 但为君故, 沉吟至今

« 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/ ]

本文链接地址:http://www.williamlong.info/archives/1136.html
  • 文章排行:
  • 6.不是俺
  • http://www.butwho.net
  • 那个,按住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
  • 17.85
  • 用.net system.text 可以直接转换。
    个人比较喜欢utf-8,全球统一编码。gb2312只有中国用。
  • 2007-11-15 10:11:12

发表评论:

◎声明:转载本文时请务必以超链接形式标明文章原始出处和作者,本文严禁商业网站转载。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 通过Google订阅本站
  • 通过鲜果订阅本站
  • 通过抓虾订阅本站
  • 通过电子邮件订阅本站

站内搜索


热文排行

最新评论

最近发表

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本站内容必须也遵循“署名-非商业用途-保持一致”的创作共用协议.

This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License.