ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 19783|回复: 7

[求助] 如何将Unicode编码转换成GBK编码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-2-11 05:32 | 显示全部楼层 |阅读模式
请教如何通过vba将Unicode转换成GBK
例如:“一”的Unicode编码是“4E00”,怎样将它转换为GBK编码“D2BB”

TA的精华主题

TA的得分主题

发表于 2010-2-11 09:14 | 显示全部楼层
这段东西你参考一下:

Sub Transcoding()

    Dim iReadNumber As Integer    '读文件号
    Dim iWriteNumber As Integer    '写文件号
    Dim mem() As Byte    'byte数组
    Dim strFileName As String    '文件名
    Dim lLength As Long    '文件长度'将文件内容读入mem byte数组
    iReadNumber = FreeFile < strFileName = TextFileName.Text
    lLength = FileLen(strFileName)
    ReDim mem(lLength) As Byte
    Open strFileName For Binary As #iReadNumber
    Get #iReadNumber, , mem
    Close #iReadNumber
    '将mem数组转换为Big5码所对应的Unicode码mem = StrConv(mem,vbUnicode,&H404)
    '再将Unicode码转换为GBK编码mem = StrConv(mem,vbFromUnicode,&H804)
    '写到源文件里去iWriteNumber = FreeFile
    Kill strFileName
    Open strFileName For Binary As #iWriteNumber
    Put #iWriteNumber, , mem
    Close #iWriteNumber

End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-2-11 10:38 | 显示全部楼层
以上代码无法运作。或许我把问题简化为:
我想通过MSWord的vba查找某个汉字例如“阿”的GBK编码就是“B0A2”。
我用以下的代码通过,VisualBasicFor2008可以查出“阿”的GBK编码。
  Dim strText As String = "阿"
    Dim arrbytOut() As Byte
    Dim myMod As Integer = 0
    Dim myGBK As String = ""
    arrbytOut = System.Text.Encoding.GetEncoding(936).GetBytes(strText) 'VBA没有相应的函数
    For i As Integer = 0 To arrbytOut.Length - 1
      myMod = i Mod 2
      myGBK += Hex(arrbytOut(i).ToString)
      If myMod <> 0 Then
        MsgBox(myGBK)
        myGBK = ""
      End If
    Next

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-2-11 12:50 | 显示全部楼层
问题已解决,我用以下编码能找到汉字的GBK代码
'啊的GBK代码为b0a1
Sub GetGBKCode()
  dim i as integer
  dim x() as Byte
  dim myGBK as string
  x=strconv("啊",vbfromunicode,&h804)
for i=0 to ubound(x)
  myGBK=myGBK+hex(x(i))
  next
  msgbox myGBK
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-2-11 13:39 | 显示全部楼层
'优化后的代码如下:
Sub Example()
  Dim buffer() As Byte
  Dim s As String
  s = "啊阿一"
  buffer = VBA.StrConv(s, vbFromUnicode, &H804) 'Simplified Chinese:&H804,Chinese Taiwan:&H404,English - United States:&H409
  Dim i As Long
  Dim n As Integer
  For i = LBound(buffer) To UBound(buffer)
    n = n + 1
    GBK2Unicode = GBK2Unicode & VBA.Right("00" & VBA.Hex(buffer(i)), 2)
    If n = 2 Then
      n = 0
      GBK2Unicode = GBK2Unicode + "/"
    End If
  Next i
  MsgBox GBK2Unicode
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-2-11 22:03 | 显示全部楼层
操作系统是中文或者是英文但选择ChinesePRC,则以上代码可简化为:
Sub GetGBKCode()
  Dim f
  Dim sPos As Single
  If Selection.Type = wdSelectionNormal Then
    Set myRange = Selection.Range
    Selection.Collapse wdCollapseStart
  Else
    Set myRange = ActiveDocument.Range(Selection.Start, ActiveDocument.Content.End)
  End If
  sPos = Selection.Start
  Selection.Collapse wdCollapseStart
  For Each iChar In myRange.Characters
    f = ""
    iChar = Selection.text
    Selection.MoveRight unit:=wdCharacter, Count:=1
    a = Hex(AscW(iChar))
    If "&H" & a <> &HD Then
      f = Hex(Asc(iChar))
      Selection.TypeText text:=f
    End If
  Next
  Selection.Start = sPos
  Selection.Collapse wdCollapseStart
  Exit Sub
ErrHandle:
  MsgBox "Error number: " + Str$(Err) + Chr(13) + Error$(Err), 48, m_Title
End Sub

TA的精华主题

TA的得分主题

发表于 2017-3-26 17:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-5-23 17:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
ASC()不就是求GBK编码的函数吗?若要显示出来:
Right(WorksheetFunction.Dec2Hex(Asc("一")), 4)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-13 02:32 , Processed in 0.021959 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表