【问题标题】:Converting a byte array with system locale set to Japanese in VB6在VB6中将系统区域设置为日语的字节数组转换为日语
【发布时间】:2014-06-02 11:46:44
【问题描述】:

在我的旧版 VB6 应用程序中,我从 web 服务接收一个字节数组形式的 zip 文件。使用 StrConv 函数将此字节数组转换为字符串并存储在文件系统中。

Dim arr() As Byte
Dim sUnicode as String

nFile = FreeFile
arr = objHTTP.responseBody

sUnicode = StrConv(arr, vbUnicode)

Open sFile For Output As #nFile
Print #nFile, sUnicode
Close #nFile

到目前为止一切都很好,这已经正常工作了十多年。 现在该应用程序也在日本使用,上面的代码导致 zip 文件损坏。

我已经发现问题与目标系统上的日语系统区域设置有关。

我尝试将语言环境 id 1033 传递给 StrConv 函数

StrConv(arr, vbUnicode, 1033)

接下来我尝试实施此链接描述的解决方案

Encoding of Text Files in VB 6.0

我还尝试使用 'SetLocaleInfo' api-call 更改系统区域设置。

在系统区域设置为日语的操作系统上,这些尝试均未生成有效的 zip 文件。

有人知道如何获得可行的解决方案吗?

提前致谢,

乔斯

【问题讨论】:

    标签: vb6 locale strconv


    【解决方案1】:

    您应该完全避免字符串转换。试试这样的:

    Dim arr() As Byte
    
    nFile = FreeFile
    arr = objHTTP.responseBody
    
    Open sFile For Binary As #nFile
    Put #nFile, , arr
    Close #nFile
    

    这会将数组的内容直接写入文件。

    【讨论】:

    • +1 某些字节序列在日语编码中不是有效的字符串。您必须完全避免使用字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多