2012-12-13 15 views
14

Ho un file di testo salvato come UTF-8 e quando provo a leggere il file mi dà strani caratteri e non i caratteri corretti (contiene caratteri cinesi). Come posso farmi dare i caratteri cinesi corretti?Leggere il file di testo utf-8 in 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 

risposta

33

From the documentation:

L'UST può leggere solo i file di testo ASCII. Non è possibile utilizzare l'FSO per leggere i file Unicode o per leggere i formati di file binari come Microsoft Word o Microsoft Excel.

Dal momento che hai personaggi strani, credo che sia un po 'scorretto e il file è stato letto in qualche pagina di codice di Windows 8-bit, perché se davvero poteva solo leggere ASCII, avreste visto ????

In ogni caso, se è possibile utilizzare ADO, si può fare questo:

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, è vero che FSO non può leggere UTF-8, ma i documenti MSDN mi fanno ridere di file Unicode e binari. –

+3

Non dimenticare di 'objStream.Close' dopo' objStream.ReadText() '. – Olexa

+2

È vero che 'FSO' non può leggere UTF-8, ma in realtà è possibile aprire il file come ASCII con' FSO' e [leggere il contenuto char per char in loop] (http://stackoverflow.com/a/ 6087783/2165759), quindi convertire quella sequenza di caratteri nella stringa [considerando ogni carattere come un byte del file codificato UTF-8] (https://en.wikipedia.org/wiki/UTF-8#Description). È solo un interesse accademico; 'ADODB.Stream' è sicuramente il più efficiente. – omegastripes

-4

potete leggere UTF 8 file formattati utilizzando la, quando vera con l'oggetto del file system.

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 Il parametro * tristate * fourth/format su .OpenTextFile() consente di aprire un file di testo usando la codifica predefinita del sistema (-2), UTF-16 (-1) o 'ASCII' (0), ma * non * UTF-8. –