在vbscript中读取utf-8文本文件

Tri*_*ham 21 vbscript utf-8 character-encoding

我有一个文本文件保存为UTF-8,当我尝试读取文件时,它给我奇怪的字符而不是正确的字符(它包含中文字符).我怎样才能让它给我正确的汉字?

Option Explicit

Dim objFSO, strTextFile, strData, strLine, arrLines, aniTextFile, aniData, aniLines, aniLine, objTextFile, fso, inputFileList, listFile, fname
Dim iim1, iret, iret2, iret3, i
Const ForReading   = 1

Set objFSO = CreateObject("Scripting.FileSystemObject")
strTextFile = "C:\Users\admin\Desktop\ArtistCG\folder.txt"
strData = objFSO.OpenTextFile(strTextFile,ForReading).ReadAll
arrLines = Split(strData,vbCrLf)

aniTextFile = "C:\Users\admin\Desktop\ArtistCG\folder-list.txt"
aniData = objFSO.OpenTextFile(aniTextFile,ForReading).ReadAll
aniLines = Split(aniData,vbCrLf)

For i = 0 To UBound(arrLines)
  strData = objFSO.OpenTextFile(arrLines(i),ForReading).ReadAll
  WScript.Echo strData

  Set listFile = objFSO.OpenTextFile(aniLines(i),ForReading)
  Do While Not listFile.AtEndOfStream
    fName = listFile.ReadLine
    WScript.Echo fName
  Loop
  listFile.Close
Next 
Run Code Online (Sandbox Code Playgroud)

Esa*_*ija 43

从文档:

FSO只能读取ASCII文本文件.您不能使用FSO读取Unicode文件或读取二进制文件格式,如Microsoft Word或Microsoft Excel.

既然你有奇怪的字符,我想这有些不正确,并且在一些8位的Windows代码页中读取了文件,因为如果它真的只能读取ASCII,那么你会看到 ????

无论如何,如果你可以使用ADO,你可以这样做:

Dim objStream, strData

Set objStream = CreateObject("ADODB.Stream")

objStream.CharSet = "utf-8"
objStream.Open
objStream.LoadFromFile("C:\Users\admin\Desktop\ArtistCG\folder.txt")

strData = objStream.ReadText()

objStream.Close
Set objStream = Nothing
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记在`objStream.ReadText()`之后的`objStream.Close`. (3认同)
  • 大声笑,FSO无法读取UTF-8,但MSDN文档让我对Unicode和二进制文件感到高兴. (2认同)
  • 确实,`FSO`不能读取UTF-8,但实际上你可以用`FSO`打开文件为ASCII,[在循环中用char读取内容char](http://stackoverflow.com/a/6087783/2165759),然后将该字符序列转换为字符串[将每个字符串视为UTF-8编码文件的字节](https://en.wikipedia.org/wiki/UTF-8#Description).这只是学术兴趣; `ADODB.Stream`绝对是最有效的. (2认同)
  • “FSO 只能读取 ASCII 文本文件”是不正确的 - FileSystemObject 可以读取 UTF-16 文件,但不能读取 UTF-8 请参阅 @Ekkehard.Horner 对 user2171987 的答案的评论 (2认同)