A.凱 2024-06-02 08:58 采纳率: 85.7%
浏览 30
已结题

VBA-JSON中文乱码报错

https://gitee.com/adam01/vba-json下载JSONConverter, 然后在读取JSON文件的时候,文件中如果有中文就会报错,这个谁能帮忙解决下吗?

img

Sub test()

Dim FSO As New FileSystemObject
Dim JsonTS As TextStream
Dim JsonText As String
Dim parsed As Dictionary

Set JsonTS = FSO.OpenTextFile("C:\Users\57630\Desktop\JSON.json", ForReading)
JsonText = JsonTS.ReadAll
JsonTS.Close

Set JSON = JsonConverter.ParseJson(JsonText)

Debug.Print JSON("writer")

End Sub

  • 写回答

11条回答 默认 最新

  • 叫兽-郭老师 新星创作者: Java技术领域 2024-06-02 08:59
    关注

    🕖上午好,题主!目前:🟢[在线]
    📢参考通义千问、由郭老师整理提供!
    📣今日诗号:何须剑道争锋?千人指,万人封;可问江湖顶峰,三尺秋水尘不染,天下无双。

    解决 VBA-JSON 中文乱码问题

    你遇到的问题是 VBA 读取包含中文的 JSON 文件时出现乱码或报错。这是因为 VBA 默认使用 GBK 编码,而你的 JSON 文件可能使用的是 UTF-8 编码。

    以下是几种解决方法,以及完整的代码示例:

    方法一: 使用 ADODB.Stream 进行编码转换 (推荐)

    Sub test()
        Dim FSO As New FileSystemObject
        Dim JsonText As String
        Dim parsed As Dictionary
        
        ' 使用 ADODB.Stream 读取文件并进行编码转换
        With CreateObject("ADODB.Stream")
            .Charset = "UTF-8" ' 设置字符集为 UTF-8
            .Open
            .LoadFromFile "C:\Users\57630\Desktop\JSON.json"
            JsonText = .ReadText
            .Close
        End With
        
        Set JSON = JsonConverter.ParseJson(JsonText)
        Debug.Print JSON("writer")
    End Sub
    

    方法二: 修改 VBA-JSON 源码

    1. 打开 VBA-JSON 项目中的 JsonConverter.cls 文件。

    2. 找到 ParseJson 函数。

    3. 在函数内部开头添加以下代码:

      ' 将 JSON 字符串转换为 UTF-8 编码
      JsonString = StrConv(JsonString, vbUnicode)
      JsonString = StrConv(JsonString, vbFromUnicode)
      
    4. 保存修改后的 JsonConverter.cls 文件。

    方法三: 将 JSON 文件另存为 GBK 编码 (不推荐)

    1. 使用文本编辑器打开 JSON 文件。

    2. 将文件编码另存为 GBK。

    3. 使用 VBA 读取修改后的文件。

    注意:

    • 方法一是最推荐的解决方案,因为它不需要修改 VBA-JSON 源码,并且可以处理各种编码格式。
    • 方法二需要修改 VBA-JSON 源码,可能会影响其他使用该库的代码。
    • 方法三不推荐使用,因为它可能会导致数据丢失或其他问题。

    完整代码示例 (使用方法一):

    Sub test()
        Dim FSO As New FileSystemObject
        Dim JsonText As String
        Dim parsed As Dictionary
        
        ' 使用 ADODB.Stream 读取文件并进行编码转换
        With CreateObject("ADODB.Stream")
            .Charset = "UTF-8" ' 设置字符集为 UTF-8
            .Open
            .LoadFromFile "C:\Users\57630\Desktop\JSON.json"
            JsonText = .ReadText
            .Close
        End With
        
        Set JSON = JsonConverter.ParseJson(JsonText)
        Debug.Print JSON("writer")
    End Sub
    

    希望以上解决方案可以帮助你解决问题!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(10条)

报告相同问题?

问题事件

  • 系统已结题 6月10日
  • 已采纳回答 6月2日
  • 创建了问题 6月2日