javascript - tag - utf-8 html
Escribir el texto UTF8 en un archivo (4)
Agregue un tercer parámetro, true
, en su llamada al método CreateTextFile
. Vea esta página .
Estoy usando la siguiente función para guardar texto en un archivo (en IE-8 con ActiveX).
function saveFile(strFullPath, strContent)
{
var fso = new ActiveXObject( "Scripting.FileSystemObject" );
var flOutput = fso.CreateTextFile( strFullPath, true ); //true for overwrite
flOutput.Write( strContent );
flOutput.Close();
}
El código funciona bien si el texto es completamente latino-9, pero cuando el texto contiene incluso un solo carácter codificado en UTF-8, la escritura falla.
El ActiveX FileSystemObject no es compatible con UTF-8, parece. Intenté UTF-16 codificando primero el texto, pero el resultado fue confuso. ¿Qué es una solución?
El método CreateTextFile
tiene un tercer parámetro que decide si el archivo debe escribirse unicode o no. Puedes hacer como:
var flOutput = fso.CreateTextFile(strFullPath,true, true);
Curiosamente, hace mucho tiempo que había creado este pequeño script para guardar archivos en formato Unicode:
Set FSO=CreateObject("Scripting.FileSystemObject")
Value = InputBox ("Enter the path of the file you want to save in Unicode format.")
If Len(Trim(Value)) > 0 Then
If FSO.FileExists(Value) Then
Set iFile = FSO.OpenTextFile (Value)
Data = iFile.ReadAll
iFile.Close
Set oFile = FSO.CreateTextFile (FSO.GetParentFolderName(Value) & "/Unicode" & GetExtention(Value),True,True)
oFile.Write Data
oFile.Close
If FSO.FileExists (FSO.GetParentFolderName(Value) & "/Unicode" & GetExtention(Value)) Then
MsgBox "File successfully saved to:" & vbCrLf & vbCrLf & FSO.GetParentFolderName(Value) & "/Unicode" & GetExtention(Value),vbInformation
Else
MsgBox "Unknown error was encountered!",vbCritical
End If
Else
MsgBox "Make sure that you have entered the correct file path.",vbExclamation
End If
End If
Set iFile = Nothing
Set oFile= Nothing
Set FSO= Nothing
Function GetExtention (Path)
GetExtention = Right(Path,4)
End Function
Nota: Este es el código de VBScript, debe guardar ese código en un archivo como unicode.vbs
, y una vez que haga doble clic en ese archivo, se ejecutará.
Prueba esto:
function saveFile(strFullPath, strContent) {
var fso = new ActiveXObject("Scripting.FileSystemObject");
var utf8Enc = new ActiveXObject("Utf8Lib.Utf8Enc");
var flOutput = fso.CreateTextFile(strFullPath, true); //true for overwrite
flOutput.BinaryWrite(utf8Enc.UnicodeToUtf8(strContent));
flOutput.Close();
}
function saveFile(strFullPath, strContent) {
var fso = new ActiveXObject( "Scripting.FileSystemObject" );
var flOutput = fso.CreateTextFile( strFullPath, true, true ); //true for overwrite // true for unicode
flOutput.Write( strContent );
flOutput.Close();
}
object.CreateTextFile(filename[, overwrite[, unicode]])