Преобразование байтового массива с системным языком, установленным на японский язык в VB6

В моем устаревшем приложении VB6 я получаю 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-файла.

Я уже выяснил, что проблема связана с локали японской системы в целевой системе.

Я попытался передать идентификатор языка 1033 в функцию StrConv

StrConv(arr, vbUnicode, 1033)

Затем я попытался реализовать решение, описанное по этой ссылке

Кодирование текстовых файлов в VB 6.0

Также я попытался изменить системный языковой стандарт, используя API-вызов SetLocaleInfo.

Ни одна из попыток не привела к созданию действительного zip-файла в операционной системе с языковым стандартом системы, установленным на японский.

Кто-нибудь знает, как получить рабочее решение?

Заранее спасибо,

Jos

1 ответ

Решение

Вы должны полностью избегать преобразования строк. Попробуйте что-то вроде этого:

Dim arr() As Byte

nFile = FreeFile
arr = objHTTP.responseBody

Open sFile For Binary As #nFile
Put #nFile, , arr
Close #nFile

Это записывает содержимое вашего массива прямо в файл.

Другие вопросы по тегам