Преобразование Little Endian в UTF-8 UCS-2 оставляет файл со многими нежелательными символами

У меня есть сценарий, который я собрал после того, как перебрал много разных способов, которыми я мог бы выполнить преобразование кодировки, используя ADODB в VBScript.

Option Explicit

Sub UTFConvert()
    Dim objFSO, objStream, file

    file = "FileToConvert.csv"

    Set objStream = CreateObject( "ADODB.Stream" )
    objStream.Open
    objStream.Type = 2
    objStream.Position = 0
    objStream.Charset = "utf-8"
    objStream.LoadFromFile file
    objStream.SaveToFile file, 2
    objStream.Close
    Set objStream = Nothing
End Sub

UTFConvert

Предполагается, что файл будет преобразован из UCS-2 Little Endian или любого читаемого формата (в пределах ограничений) в UTF-8. Проблема, однако, в том, что после того, как этот файл завершил преобразование в UTF-8, существует много NUL символы во всем файле до и после каждой буквы, и xFFxFE (UCS-2 LE BOM) в начале файла. Они видны без необходимости использования каких-либо переключателей визуализации символов. Любая помощь будет признательна в понимании, где я могу быть ограничен этим преобразованием. Или любой альтернативный подход, который я могу использовать.

1 ответ

Решение

Ваш Stream Объект загружает файл как файл в кодировке UTF-8, таким образом, неправильно интерпретируя последовательности байтов. Прочитайте файл, используя FileSystemObject экземпляр и запишите его с ADODB.Stream объект:

Sub UTFConvert(filename)
  Set fso = CreateObject("Scripting.FileSystemObject")
  txt = fso.OpenTextFile(filename, 1, False, -1).ReadAll

  Set stream = CreateObject("ADODB.Stream")
  stream.Open
  stream.Type     = 2 'text
  stream.Position = 0
  stream.Charset  = "utf-8"
  stream.WriteText txt
  stream.SaveToFile filename, 2
  stream.Close
End Sub
Другие вопросы по тегам