Юникод в UTF-8 - PullRequest
       39

Юникод в UTF-8

8 голосов
/ 08 ноября 2010

Я использую vbscript для извлечения данных из db2 и записи в файл.Запись в файл типа:

Set objTextFile = objFSO.CreateTextFile(sFilePath, True, True)

, который создает файл в Unicode.Но это XML-файл, и он использует UTF-8.Поэтому, когда я открываю XML-файл с помощью MS XML Notepad, выдается ошибка: «шестнадцатеричное значение 0x00 является недопустимым символом»

Поэтому я открываю этот текстовый файл с помощью TextPad и сохраняю в UTF-8.После этого XML открывается без проблем.Могу ли я конвертировать файл из Unicode в UTF-8 с помощью vbScript?

Ответы [ 2 ]

16 голосов
/ 08 ноября 2010

Использование объекта Stream для сохранения файла с набором символов utf-8 может работать лучше для вас; вот простая функция .vbs, которую вы можете проверить на своих данных:

Option Explicit

Sub Save2File (sText, sFile)
    Dim oStream
    Set oStream = CreateObject("ADODB.Stream")
    With oStream
        .Open
        .CharSet = "utf-8"
        .WriteText sText
        .SaveToFile sFile, 2
    End With
    Set oStream = Nothing
End Sub

' Example usage: '
Save2File "The data I want in utf-8", "c:\test.txt"
0 голосов
/ 18 ноября 2017

Ну, в некоторых случаях нам нужно сделать это в WSH на машине без ADO.В этом случае имейте в виду, что WSH не создает файл в формате UTF-8 (метод CreateTextFile не работает с UTF-8), но вполне возможно манипулировать файлом UTF-8 (добавление данных).Размышляя об этом, я нашел неортодоксальное решение.Выполните следующие действия:

1) Откройте пустую NOTEPAD, нажмите FILE> SAVE AS, введите имя файла (например, UTF8FileFormat.txt), измените поле «Кодировка» на UTF-8 инажмите в [Сохранить].Оставьте NOTEPAD.

2) В своем WSH вы будете использовать UTF8FileFormat.txt для создания вашего текстового файла UTF8.Для этого после объявления FileSystemObject используйте метод CopyFile, чтобы скопировать UTF8FileFormat.txt в новый файл (не забудьте использовать параметр Overwrite), а затем используйте метод OpenTextFile, чтобы открыть новый файл с параметрами ForAppending и NoCreate.После этого вы можете писать в этот файл как обычно (как в методе CreateTextFile).Ваш новый файл будет в формате UTF-8.Ниже приведен пример:

'### START
'  ### REMEMBER: You need to create the UTF8FileFormat.txt file in a blank
'  ###           NOTEPAD with UTF-8 Encoding first.
   Unicode=-1 : ForAppending=8 : NoCreate=False : Overwrite=True
   set fs = CreateObject("Scripting.FileSystemObject")
   fs.CopyFile "UTF8FileFormat.txt","MyNewUTF8File.txt",Overwrite
   set UTF8 = fs.OpenTextFile("MyNewUTF8File.txt", ForAppending, NoCreate)
   UTF8.writeline "My data can be writed in UTF-8 format now"
   UTF8.close
   set UTF8 = nothing
'### END
...