3

J'utilise la fonction suivante pour enregistrer du texte dans un fichier (sur IE-8 avec ActiveX).Écrire du texte UTF8 dans le fichier

function saveFile(strFullPath, strContent) 
{ 
    var fso = new ActiveXObject("Scripting.FileSystemObject"); 

    var flOutput = fso.CreateTextFile(strFullPath, true); //true for overwrite 
    flOutput.Write(strContent); 
    flOutput.Close(); 
} 

Le code fonctionne très bien si le texte est entièrement Latin-9, mais lorsque le texte contient même un UTF-8 unique caractère codé, l'écriture échoue.

L'ActiveX FileSystemObject ne prend pas en charge UTF-8, semble-t-il. J'ai essayé d'encoder le texte UTF-16 en premier mais le résultat a été brouillé. Qu'est-ce qu'une solution de contournement?

+0

Thanx un gars du lot. a pu résoudre http://code.google.com/p/memonaut/issues/detail?id=6&can=7 avec votre aide. – sonofdelphi

Répondre

4

Essayez ceci:

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(); 
} 
+2

Utf8Lib hors de l'air? Non installé dans notre société. –

+0

Il n'y a pas de méthode 'BinaryWrite' dans l'objet' ITextStream' retourné par la méthode 'CreateTextFile', et qu'est-ce que' Utf8Lib.Utf8Enc'? –

1

La méthode CreateTextFile possède un troisième paramètre qui détermine si le fichier doit être écrit unicode ou non. Vous pouvez faire comme:

var flOutput = fso.CreateTextFile(strFullPath,true, true); 

Fait intéressant, le chemin du retour j'avais créé ce petit script pour enregistrer des fichiers au format 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 

Note: Ceci est du code VBScript, vous devez enregistrer ce code dans un fichier comme unicode.vbs, et une fois que vous double-cliquez sur ce fichier, il va s'exécuter.

+1

Non, ne sera pas enregistrer en tant que UTF-8. –

2

Ajouter un troisième paramètre, true, dans votre appel à la méthode CreateTextFile. See this page.

+2

il économisera en UTF-16, pas UTF8 – nightcoder

-1
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]])

Questions connexes