2008-09-16 11 views
40

je un fichier enregistré comme Little Endian UCS-2 Je souhaite modifier le codage alors j'ai couru le code suivant:Powershell: Définition du codage pour Get-Content Pipeline

cat tmp.log -encoding UTF8 > new.log 

Le fichier résultant est toujours en UCS -2 Little Endian. Est-ce parce que le pipeline est toujours dans ce format? Existe-t-il un moyen facile de transférer ceci à un nouveau fichier comme UTF8?

Répondre

45

Comme suggéré here:.

Get-Content tmp.log | Out-File -Encoding UTF8 new.log 
+0

Merci d'avoir répondu à cette question ... Cela m'a aidé à comprendre un problème de lecture d'un fichier xml encodé en UTF-8 –

+1

Maintenant, comment se débarrasser de cette stupide marque de commande d'octets? – Qwertie

+2

Voir http://stackoverflow.com/questions/5596982/using-powershell-to-write-a-file-in-utf-8-with-the-bom –

17

je le ferais comme ceci:

get-content tmp.log -encoding Unicode | set-content new.log -encoding UTF8 

Ma compréhension est que l'option -encoding sélectionne le encdoing que le fichier doit être lu ou écrit en

+7

« Get- Help Set-Content "n'identifie pas le codage en tant qu'option, mais il fonctionne en fait. – jedatu

+6

@jedatu: C'est parce que ce paramètre provient du fournisseur FileSystem. – Joey

2

charger le contenu du fichier XML avec codage.

(Get-Content -Encoding UTF8 $ fileName)

+1

Vous monsieur m'a sauvé! merci beaucoup :) – ylka

+0

N'utilisez pas 'Get-Content' pour lire des fichiers XML, car cela nécessite une connaissance préalable de l'encodage des fichiers. Il est préférable de laisser l'analyseur XML lire le fichier lui-même, car il traite correctement tout encodage que le fichier pourrait avoir. '$ xml = (New-Object System.Xml.XmlDocument) .Load ($ nomFichier)' – Tomalak

1

Si vous lisez un fichier XML, voici une meilleure façon qui s'adapte à l'encodage de votre fichier XML:

$xml = New-Object -Typename XML 
$xml.load('foo.xml') 
Questions connexes