2012-12-13 7 views
14

Ich habe eine Textdatei als UTF-8 gespeichert und wenn ich versuche, die Datei zu lesen, gibt es mir seltsame Zeichen und nicht die richtigen Zeichen (es enthält chinesische Schriftzeichen). Wie kann ich dafür sorgen, dass es mir die richtigen chinesischen Schriftzeichen gibt?Lesen utf-8 Textdatei im Vbscript

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 

Antwort

33

From the documentation:

Das BFS kann nur ASCII-Textdateien lesen. Sie können das FSO nicht verwenden, um Unicode-Dateien zu lesen oder Binärdateiformate wie Microsoft Word oder Microsoft Excel zu lesen.

Da Sie seltsame Zeichen bekam, ich denke, das ist etwas falsch, und die Datei wurde in einigen 8-Bit-Windows-Codepage lesen, denn wenn es wirklich nur ASCII lesen könnten, würden Sie ????

Auf jeden Fall gesehen haben, wenn Sie ADO verwenden können, können Sie dies tun:

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

lol, es ist wahr, dass FSO UTF-8 nicht lesen kann, aber die MSDN-Dokumentation bringt mich zum Lachen über Unicode und Binärdateien. –

+3

Vergessen Sie 'objStream.Close' nicht nach' objStream.ReadText() '. – Olexa

+2

Es ist wahr, dass 'FSO' UTF-8 nicht lesen kann, aber tatsächlich können Sie die Datei als ASCII mit' FSO' öffnen und [den Inhalt durch char-in-loop lesen] (http://stackoverflow.com/a/ 6087783/2165759), dann wandle diese Zeichenfolge in die Zeichenfolge um [wobei jedes Zeichen als ein Byte der UTF-8-codierten Datei betrachtet wird] (https://en.wikipedia.org/wiki/UTF-8#Description). Es ist nur ein akademisches Interesse; 'ADODB.Stream' ist definitiv der effizienteste. – omegastripes

-4

Sie können UTF-8-Format-Dateien lesen, indem Sie das, True, wenn sie mit dem Dateisystemobjekt.

sFile = "C:\Users\admin\Desktop\ArtistCG\folder.txt" 
Set FS = CreateObject("scripting.filesystemobject") 
Set oReadfile = FS.OpenTextFile(sFile, 1, False, True) 
TextFromFile = sReadfile.ReadAll 
+6

-0.99 Der Parameter * tristate * viertel/format zu .OpenTextFile() ermöglicht das Öffnen einer Textdatei mit der Standard-Codierung (-2), UTF-16 (-1) oder 'ASCII' (0), aber * nicht * UTF-8. –