Проблема кодировки специальных символов VBA при создании текстового файла - PullRequest
0 голосов
/ 27 сентября 2019

В настоящее время я работаю над макросом, который извлекает данные из таблицы Excel и создает отформатированный текстовый файл JSON.Проблема в том, что в выходном файле неправильно отображаются специальные символы:

i expect "â" but i got "\u00E2"
i expect "é" but i got "\u00E9"
...

Код:

res = ConvertToJson(items, Whitespace:=2)
Set fso = CreateObject("Scripting.FileSystemObject")
Set outputFile = fso.CreateTextFile(path & "\output_" & CStr(Format((Now()), "ddmmyyyy_hhmmss")) & ".json", False, False)
outputFile.WriteLine res
outputFile.Close

При использовании этой логики я получил ошибки кодирования.Я пробовал преобразование через NotePad ++, изменяя аргументы функции createTextFile, но я всегда получал эти ошибки.

Кто-нибудь уже сталкивался с этой проблемой и нашел исправление?

1 Ответ

1 голос
/ 27 сентября 2019

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

Вам придется установить ссылку на Microsoft ActiveX Data Objects 2.x Library или использовать позднее связывание.

В этом примере создаетсяФайл в кодировке UTF-8 и использует CRLF в качестве перевода строки, но вы можете настроить его под свои нужды:

Dim path As String
path = "c:\yourPath"

Dim res As String
res = ConvertToJson(items, Whitespace:=2)

With New ADODB.Stream
    .Open
    .Charset = "UTF-8"
    .LineSeparator = ADODB.LineSeparatorEnum.adCRLF
    .WriteText res, ADODB.StreamWriteEnum.adWriteLine
    .SaveToFile path & "\output_" & CStr(Format((Now()), "ddmmyyyy_hhmmss")) & ".json", _
        ADODB.SaveOptionsEnum.adSaveCreateOverWrite
    .Close
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...