Чтение текстового файла utf-8 в vbscript
У меня есть текстовый файл, сохраненный как 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
Ответы
Ответ 1
Из документации:
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
Ответ 2
Вы можете читать форматированные файлы UTF 8, используя True, когда с объектом файловой системы.
sFile = "C:\Users\admin\Desktop\ArtistCG\folder.txt"
Set FS = CreateObject("scripting.filesystemobject")
Set oReadfile = FS.OpenTextFile(sFile, 1, False, True)
TextFromFile = sReadfile.ReadAll