月光博客 » 编程开发 » 中文汉字GB2312和UTF-8的编码转换程序

中文汉字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

顶一下 ▲()   踩一下 ▼()

相关文章

  1. 1
    深圳翻译   说道:
    Think you!
    支持(11反对(4回复
  1. 2
    小金   说道:
    代码简短而实用,谢了
    支持(9反对(3回复
  1. 3
    123   说道:
    darn,I hate VB,罗
    支持(8反对(5回复
  1. 4
    安庆法律人   说道:
    谁知道怎么转换数据库?
    支持(6反对(3回复
  1. 5
    不是俺   说道:
    那个,按住alt敲小键盘上的数字,就能输入ascii码,这个知道吧?比如,alt97=a, alt+98765=佂。这个技巧曾被用来输入无法破解的密码,步骤就是在百度搜索自己的名字,然后把%BA%BA%D7%D6这样的十六进制数转化成十进制数,再用alt输入。这样一次输入的就是两个键盘打不出的字符。
    某一次在论坛上,俺见有人说把qq号如此输入一下玩,于是就想做一个ascii码转字符的程序。
    但是,俺的水平有限,不知道怎么做。vb不认识三位数以上的密码,VC++好像也是把它们都转化成单字符的ascii码,根本无法显示汉字。
    俺用js做了个,结果显示的都是韩国字,估计是因为js使用utf8编码的缘故。估计有了您这个东西,就能正常运作了?
    支持(7反对(5回复
  1. 6
    guwei   说道:
    这程序很实用
    支持(5反对(3回复
  1. 7
    welcomyou   说道:
    用Java就更简单了。就一行
    支持(6反对(4回复
  1. 8
    杀鸡敬猴   说道:
    不懂,还是学习
    支持(5反对(3回复
  1. 9
    linker   说道:
    以前想过,通过留言本的另存功能,不知道能不能转换这样的编码?呵
    支持(7反对(6回复
  1. 10
    竞博客   说道:
    月光,如果做外文网站是不是应该用UTF-8的编码?又或者是UTF-8的编码对于搜索引擎更为友好?谢谢
    支持(9反对(8回复
  1. 11
    carheaven   说道:
    现成的代码都外有。
    支持(5反对(4回复
  1. 12
    85   说道:
    用.net system.text 可以直接转换。
    个人比较喜欢utf-8,全球统一编码。gb2312只有中国用。
    支持(5反对(4回复
  1. 13
    星伯   说道:
    貌似很简单
    支持(6反对(5回复
  1. 14
    重庆   说道:
    呵呵。我一般写程序时,直接把汉字用server.encode后直接发送浏览器地址。
    支持(4反对(3回复
  1. 15
    Heyi   说道:
    我的一个论坛正准备进行数据转换,从phpwind6.0RC到discuz6.0,正愁编码的问题,哈。
    支持(7反对(6回复
  1. 16
    Mic   说道:
    SF
    支持(6反对(6回复
  1. 17
    yufengfeng   说道:
    潜水很久了,一不小心坐了个沙发
    支持(7反对(7回复
  1. 18
    EEFFEE   说道:
    不错,很实用。---用的时候我会来这里找。。
    支持(5反对(5回复
  1. 19
    yinwowo   说道:
    这个程序网上很多啊
    支持(5反对(5回复
  1. 20
    arong   说道:
    不过,我记得有专门这样的软件,实现非常方便。
    支持(6反对(6回复
  1. 21
    嘉林   说道:
    不懂啊。嘿嘿。
    支持(5反对(5回复
  1. 22
    威客部落   说道:
    不错,学习了……
    支持(7反对(7回复
  1. 23
    ititbar   说道:
    以前对这个还很好奇的,今天月光给解开了
    支持(7反对(8回复
  1. 24
    yufengfeng   说道:
    很高深阿
    支持(5反对(7回复
  1. 25
    yoyo   说道:
    不错!
    不过我现在不用VB语言了,用类C语言,里面有相关的函数。
    支持(4反对(6回复
  1. 26
    按时打发法   说道:
    犯得上感
    支持(4反对(6回复
  1. 27
    aaaaaaa   说道:
    编码测试 utf8
    支持(2反对(6回复
  1. 28
    000   说道:
    用脚本就可以啦
    汉字的内码
    支持(2反对(7回复
  1. 29
    John   说道:
    学习了
    支持(1反对(7回复
  1. 30
    Null   说道:
    同LS。看起来这个程序早就有了哦
    支持(7反对(16回复

发表留言