UCS-2 Little Endian转换为UTF-8会使文件中包含许多不需要的字符

时间:2015-09-02 02:15:34

标签: 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
    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。但问题是,一旦此文件转换为UTF-8,在每个字母之前和之后的整个文件中都有许多NUL个符号,xFF xFE(UCS-2 LE) BOM)在文件的开头。这些是可见的,无需使用任何符号可视化切换。任何帮助将理解我可能受限于此转换。或者我可以采取任何其他方法。

1 个答案:

答案 0 :(得分:3)

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