Преобразование байтового массива с системным языком, установленным на японский язык в 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
Это записывает содержимое вашего массива прямо в файл.