You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB6中使用WinHTTP获取站点波斯语TXT文件时ResponseText乱码问题

VB6中使用WinHTTP获取站点波斯语TXT文件时ResponseText乱码问题

嘿,我来帮你搞定这个波斯语TXT文件乱码的问题~你的代码逻辑没问题,但乱码的核心原因是:服务器上的波斯语文本大概率是UTF-8编码,而WinHTTP的ResponseText会根据响应头里的Content-Type自动解码,如果服务器没明确返回编码信息,它就会用系统默认编码去解析,直接把UTF-8的波斯语字符转成了乱码。

解决思路很简单:跳过WinHTTP自动解码的步骤,直接获取原始二进制数据,再手动转换成正确的UTF-8编码字符串。下面是修改后的完整代码:

首先,你需要在窗体的通用声明部分或者模块里添加API函数声明(VB6需要调用系统API来处理UTF-8转字符串):

Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByRef lpMultiByteStr As Byte, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long

' 定义UTF-8对应的代码页常量
Const CP_UTF8 = 65001

然后修改你原来的WinHTTP请求代码,改用ResponseBody获取二进制数据,再转换为字符串:

Dim HTTPRequest As WinHttp.WinHttpRequest
Dim byteData() As Byte
Dim strPersianText As String

Set HTTPRequest = New WinHttp.WinHttpRequest

With HTTPRequest
    .Open "GET", "http://mywebsite/msg_app.txt", True
    .Send
    
    If .WaitForResponse(3) Then
        ' 获取服务器返回的原始二进制数据(避免自动解码乱码)
        byteData = .ResponseBody
        
        ' 调用自定义函数把UTF-8字节转换为VB6可识别的字符串
        strPersianText = UTF8ToString(byteData)
        
        ' 现在就能正常显示波斯语了
        MsgBox strPersianText
    Else
        MsgBox "Timed out after 3 seconds."
    End If
End With

Set HTTPRequest = Nothing

最后添加这个用来转换UTF-8字节到字符串的自定义函数:

Private Function UTF8ToString(utf8Bytes() As Byte) As String
    Dim byteLength As Long
    Dim strBufferLength As Long
    Dim resultString As String
    
    ' 计算UTF-8字节数组的总长度
    byteLength = UBound(utf8Bytes) - LBound(utf8Bytes) + 1
    
    ' 先获取转换为Unicode字符串需要的缓冲区长度
    strBufferLength = MultiByteToWideChar(CP_UTF8, 0, utf8Bytes(LBound(utf8Bytes)), byteLength, 0, 0)
    
    ' 创建对应长度的空字符串作为缓冲区
    resultString = String(strBufferLength, 0)
    
    ' 执行编码转换
    MultiByteToWideChar CP_UTF8, 0, utf8Bytes(LBound(utf8Bytes)), byteLength, StrPtr(resultString), strBufferLength
    
    UTF8ToString = resultString
End Function

另外要确认一下:服务器上的msg_app.txt文件确实是用UTF-8编码保存的(不要用ANSI,因为波斯语ANSI是Windows-1256,跨环境容易出问题)。用这种方式获取并转换,就能完美显示波斯语内容啦~

备注:内容来源于stack exchange,提问作者Unforgiven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 12:00:35