VBA网抓字符转换

8 篇文章 0 订阅

VBA虽然不是专业爬虫工具,但是Excel删除后续数据处理与分析,所以对于不复杂的网页数据抓取也经常在VBA来实现。
有些时候,在网页中看到的内容,使用浏览器的“审查元素”功能也可以看到的内容,如下图。

但是用代码抓取回来就只有如下的字符串,面目全非完全无法认读。

北京天安门

怎么回事呢,这是由于网页中使用了字符的UTF编码,在浏览器中加载页面的时候可以自动转换为中文字符,HTML源码如下。

<html>
    <body>
        <p>&#X5317;&#X4EAC;&#X5929;&#X5B89;&#X95E8;</p>
    </body>
</html>

既然已经抓取到了UTF编码的字符,在VBA是否可以转换为中文呢?VBA中有StrConv可以实现Unicode转换,通常网页中会使用十六进制的表示形式,所以在VBA中还需要借助工作表函数实现进制转换,可以实现但是有些繁琐。

处理HTML肯定是JavaScript最方便了,在VBA中调用JavaScript实现这个转换就可以了。

Sub JSDemo()
    Dim strCN, strHex, strNew
    With CreateObject("MSScriptControl.ScriptControl")
        .Language = "javascript"
        strJSCode = "function StrToHex(r){for(var t='',n=0;n<r.length;n++)t+='&#x'+r.charCodeAt(n).toString(16)+';';return t}"
        .AddCode strJSCode
        strJSCode = "function HexToStr(r){var n='',t=r.replace(';','').split('&#x');for(i=1;i<t.length;i++)n+=String.fromCharCode(parseInt(t[i],16));return n}"
        .AddCode strJSCode
        strCN = "北京天安门"
        strHex = .Run("StrToHex", strCN)
        strNew = .Run("HexToStr", strHex)
    End With
    Debug.Print UCase(strHex)
    MsgBox "原始字符" & vbTab & strCN & vbNewLine & _
           "转换后" & vbTab & strHex & vbNewLine & _
           "逆转换" & vbTab & strNew
End Sub

【代码解析】
第3行代码创建ScriptContrl对象。
第4行代码指定语言为JavaScript。
第5行到第8行代码添加两个JavaScript的函数,其中StrToHex实现字符串转换UTF编码,HexToStr实现UTF转换为字符串。JavaScript代码就不再讲解了。
第9行指定测试字符串。
第14行输入转换结果,如下图所示。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VBA中,将16进制字符转换成中文需要进行以下几个步骤: 1. 首先,将16进制字符串拆分成每两个字符的子字符串。例如,将字符串"e4b8ade59bbde4b893"拆分成["e4", "b8", "ad", "e5", "9b", "bd", "e4", "b8", "93"]。 2. 然后,循环遍历每个子字符串,并将其转换成对应的16进制数值。可以使用VBA的Hex函数将字符转换成对应的数值。 3. 接着,将得到的16进制数值转换成字节。可以使用VBA的Chr函数将数值转换成字节。 4. 最后,将字节转换成中文字符。可以使用VBA的StrConv函数将字节转换成Unicode字符。 下面是一个示例代码,实现将16进制字符转换成中文的操作: ```vba Sub ConvertHexToChinese() Dim hexString As String Dim result As String hexString = "e4b8ade59bbde4b893" result = "" For i = 1 To Len(hexString) Step 2 num = "&H" & Mid(hexString, i, 2) '将子字符转换成对应的16进制数值 byteValue = Chr(num) '将16进制数值转换成字节 chineseChar = StrConv(byteValue, vbUnicode) '将字节转换成Unicode字符 result = result & chineseChar Next i MsgBox result '输出结果 End Sub ``` 在上述示例代码中,我们使用了一个名为`hexString`的变量来保存需要转换的16进制字符串。然后,我们创建了一个名为`result`的变量来保存转换后的中文字符串。在循环遍历每个子字符串时,我们将其转换成对应的16进制数值,并使用`Chr`函数将其转换成字节。最后,通过`StrConv`函数将字节转换成Unicode字符,并将转换后的字符追加到`result`变量中。最终,我们通过`MsgBox`函数将转换后的中文字符串输出到对话框中。 希望以上内容能够对您有所帮助。如果有任何疑问,请随时追问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值