2009-02-06 13 views
5

Savez-vous comment transformer par programmation ou via scrirpt un ensemble de fichiers texte enregistrés dans l'encodage de caractères ansi, en codage unicode?script pour enregistrer le fichier en tant qu'unicode

Je voudrais faire la même chose que lorsque j'ouvre le fichier avec le bloc-notes et que je choisis de le sauvegarder en tant que fichier unicode.

+0

Dupliquer de http://stackoverflow.com/questions/64860/best-way-to-convert-text-files-between-character-sets et aussi voir http://stackoverflow.com/questions/76482/powershell -setting-encoding-for-get-content-pipeline –

Répondre

-1

Vous pouvez utiliser iconv. Sous Windows, vous pouvez l'utiliser sous Cygwin.

iconv -f from_encoding -t to_encoding file 
+3

Pourquoi la réponse acceptée est-elle liée à Cygwin? La question est marquée comme PowerShell ... – guillermooo

+0

Oui, au début, je cherchais une solution PowerShell, mais s'avère que cela a fonctionné vraiment bien pour moi et je pourrais également utiliser cygwin. De toute façon toutes les réponses données semblent être des approches valides – river0

0

Utilisez la classe System.IO.StreamReader (pour lire le contenu du fichier) avec la classe de base System.Text.Encoding.Encoding (pour créer l'objet Encodeur qui effectue le codage).

-1

code pseudo ...

système Dim, fichiers, contenu, newFile, oldfile

Const ForReading = 1, ForWriting = 2, 3 ForAppending = Const AnsiFile = -2, -1 = UnicodeFile

Set système = CreateObject ("Scripting.FileSystemObject ...

Set file = system.GetFile (" Text1.txt ")

Set OLDFILE = file.OpenAsTextStream (ForReading, AnsiFile)

contenu = oldFile.ReadAll()

oldFile.Close

system.CreateTextFile "Text1.txt"

Set file = système .GetFile ("Text1.txt")

Set newFile = file.OpenAsTextStream (ForWriting, UnicodeFile)

contenu newFile.Write

newFile.Close

espère que cette approche fonctionne ..

3

La meilleure façon serait Get-Content 'path/to/text/fichier' | out-file 'nom/de/fichier'.

Out-File has an -encoding parameter, dont la valeur par défaut est Unicode.

Si vous vouliez scénario un lot d'entre eux, vous pouvez faire quelque chose comme

$files = get-childitem 'directory/of/text/files' 
foreach ($file in $files) 
{ 
    get-content $file | out-file $file.fullname 
} 
0

Vous pouvez créer un nouveau fichier texte et d'écrire les octets du fichier d'origine dans la nouvelle, en plaçant un « \ 0 'avant chaque octet original (en supposant que le fichier texte original était en anglais).

10

Cela pourrait fonctionner pour vous, mais notez qu'il va saisir chaque fichier dans le dossier en cours:


Get-ChildItem | Foreach-Object { $c = (Get-Content $_); ` 
Set-Content -Encoding UTF8 $c -Path ($_.name + "u") } 

Même chose en utilisant des alias pour brièveté:


gci | %{ $c = (gc $_); sc -Encoding UTF8 $c -Path ($_.name + "u") } 

Steven Murawski suggère en utilisant Out-File à la place. Les différences entre les deux applets de commande sont les suivantes:

  • Out-File tente de formater l'entrée qu'il reçoit.
  • Out-File Le codage par défaut est basé sur Unicode, alors que Set-Content utilise la valeur par défaut du système.

Voici un exemple en supposant que le fichier test.txt n'existe pas dans les deux cas:


PS> [system.string] | Out-File test.txt 
PS> Get-Content test.txt 

IsPublic IsSerial Name          BaseType   
-------- -------- ----          --------   
True  True  String         System.Object  

# test.txt encoding is Unicode-based with BOM 


PS> [system.string] | Set-Content test.txt 
PS> Get-Content test.txt 

System.String 

# test.txt encoding is "ANSI" (Windows character set) 

En fait, si vous ne avez pas besoin de codage Unicode spécifique, vous pouvez aussi bien faire ce qui suit pour convertir un fichier texte Unicode:


PS> Get-Content sourceASCII.txt > targetUnicode.txt 

Out-File est un « opérateur de redirection avec optiona l paramètres "de sortes.

Questions connexes