UCS-2 Little Endian 到 UTF-8 的转换会留下许多不需要的字符的文件

UCS-2 Little Endian to UTF-8 conversion leaves file with many unwanted characters

我有一个脚本,是我在尝试了许多不同的方法后组合在一起的,我可以在 VBScript 中使用 ADODB 进行编码转换。

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 符号,并且 xFF xFE (UCS-2 LE BOM) 在文件的开头。这些是可见的,无需使用任何符号可视化切换。如果能帮助我理解这种转换在哪些方面可能会受到限制,我们将不胜感激。或者我可以采取的任何替代方法。

您的 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