2010-11-08 18 views
8

estoy usando vbscript para extraer datos de db2 y escribir en el archivo. escribir en el archivo como:Unicode a UTF-8

Set objTextFile = objFSO.CreateTextFile(sFilePath, True, True) 

que crea el archivo en Unicode. Pero ese es un archivo xml y usa UTF-8. Así que cuando abro el archivo XML con MS XML Bloc de notas que arroja error: 'valor hexadecimal 0x00 es un carácter no válido'

Así que abrir este archivo de texto con TextPad y el ahorro en UTF-8. Después de eso XML se abre sin ningún problema. ¿Puedo convertir el archivo de Unicode a UTF-8 por vbScript?

+1

¿Qué significa 'unicode' en vbscript? ¿Qué codificación realmente usa? –

+1

vbscript probablemente esté escribiendo archivos en codificación UTF-16 como valor predeterminado. UTF-16 tendrá 0x00 en todo el lugar como el byte de orden superior en el texto occidental. Y, para no ser pedante, pero UTF-8 * es * Unicode; es un esquema de codificación Unicode particular. – DaveE

+0

¿Alguna de las siguientes dos respuestas te ayudó/fue útil? :-) – stealthyninja

Respuesta

16

El uso del objeto Stream para guardar su archivo con el juego de caracteres utf-8 podría funcionar mejor para usted; He aquí un sencillo .vbs funcionan podría probar en sus datos:

Option Explicit 

Sub Save2File (sText, sFile) 
    Dim oStream 
    Set oStream = CreateObject("ADODB.Stream") 
    With oStream 
     .Open 
     .CharSet = "utf-8" 
     .WriteText sText 
     .SaveToFile sFile, 2 
    End With 
    Set oStream = Nothing 
End Sub 

' Example usage: ' 
Save2File "The data I want in utf-8", "c:\test.txt" 
0

Bueno, en algunos casos, tenemos que hacer esto en WSH en una máquina sin ADO. En este caso, tenga presente que WSH no crea archivos en formato UTF-8 (el método CreateTextFile no funciona con UTF-8), pero es completamente posible manipular un archivo UTF-8 (datos adjuntos). Pensando esto, encontré una solución no ortodoxal. Seguir los siguientes pasos:

1) Abrir un cuaderno en blanco, haga clic en Archivo> Guardar como, escriba un nombre para el archivo (como UTF8FileFormat.txt, por ejemplo), cambie el campo "codificación" UTF-8 y haga clic en [Salvar]. Deje NOTEPAD.

2) En su WSH, utilizará UTF8FileFormat.txt para crear su archivo de texto UTF8. Para ello, después de su declaración FileSystemObject, utilice el método CopyFile para copiar el archivo UTF8FileFormat.txt a un archivo nuevo (recuerde usar la opción Sobrescribir) y, a continuación, utilice el método OpenTextFile para abrir su nuevo archivo con las opciones ForAppending y NoCreate. Después de esto, podrá escribir en este archivo normalmente (como en el método CreateTextFile). Su nuevo archivo estará en formato UTF-8. A continuación, siga un ejemplo:

'### START 
' ### REMEMBER: You need to create the UTF8FileFormat.txt file in a blank 
' ###   NOTEPAD with UTF-8 Encoding first. 
    Unicode=-1 : ForAppending=8 : NoCreate=False : Overwrite=True 
    set fs = CreateObject("Scripting.FileSystemObject") 
    fs.CopyFile "UTF8FileFormat.txt","MyNewUTF8File.txt",Overwrite 
    set UTF8 = fs.OpenTextFile("MyNewUTF8File.txt", ForAppending, NoCreate) 
    UTF8.writeline "My data can be writed in UTF-8 format now" 
    UTF8.close 
    set UTF8 = nothing 
'### END 
+0

Eso es una completa información errónea sin sentido/peligroso. El anteponer una BOM a una cadena codificada ANSI de un solo byte ** ** no lo convierte mágicamente a UTF-8. –