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

UCS-2 Little-Endian到UTF-8的转换会给文件留下许多不需要的字符,utf-8,vbscript,ucs2,Utf 8,Vbscript,Ucs2,我有一个脚本,我经过了许多不同的方法,我可以使用VBScript中的ADODB进行编码转换,然后把它放在一起 Option Explicit Sub UTFConvert() Dim objFSO, objStream, file file = "FileToConvert.csv" Set objStream = CreateObject( "ADODB.Stream" ) objStream.Open objStream.Type = 2

我有一个脚本,我经过了许多不同的方法,我可以使用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)位于文件的开头。它们是可见的,无需使用任何符号可视化切换。如果您能帮助我了解我在转换过程中可能受到的限制,我们将不胜感激。或者我可以采取的任何替代方法。

您的
对象正在将文件加载为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

您的
对象正在将该文件作为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