2016-07-22 14 views
1

Ich führe ein Powershell-Skript auf XML-Dateien rekursiv zum Suchen und Ersetzen von Text. Der Code funktioniert gut mit dem Suchen und Ersetzen des Textes. In bestimmten Dateien gibt es jedoch andere Sprachen wie fréquentes, die nach dem Ausführen des Skripts in frà © quentes geändert wird. Ich habe die UTF8-Codierung im Skript verwendet. Irgendwelche Hinweise, wie man das Enkodieren behält?Codierung Problem in Powershell suchen und ersetzen

$content| Foreach-Object{$_ -replace 'test1' , 'testing'` 
          -replace 'test2' , 'testing' }| Out-File file.FullName -Encoding utf8 

Antwort

2

Sie scheinen die XML-Datei, die Codierung zu ignorieren, die Latein 1. XML-Dateien angeben, ihre Codierung am Anfang (oder, wenn sie sich nicht, zu sein scheint, werden sie als UTF-8 automatisch erkannt werden, UTF-16 oder UTF-32):

<?xml version='1.0' encoding='utf-8'?> 

So scheint es mir, wie Sie den Inhalt mit der richtigen Codierung lesen, aber die Datei in UTF-8 schreiben, die nicht denjenigen erklärt entsprechen.

Sie den XML-APIs verwenden, könnten die Datei zu ändern, was vorteilhaft sein kann, oder einfach Ihre Out-File zu

ändern
Out-File -Encoding Default 

jedoch, dass die Codierung zwischen verschiedenen Computern zu unterscheiden, so vorsichtig verursachen kann damit. Ich benutze es nur für Dateien, von denen ich weiß, dass sie in der alten Codepage des Systems enthalten sind, oder für schnelle einmalige Skripte.

+0

Danke für Ihre Antwort. Ändern Sie es standardmäßig funktioniert. Meine XML-Datei hat die unten genannten und deshalb habe ich versucht, utf8 im Skript zu verwenden. Bedeutet standardmäßig, die gleiche Codierung zu verwenden, die bereits in der XML-Datei vorhanden ist, oder die XML-Datei von utf-8 – user2628187

+0

'Default' zu default zu ändern bedeutet, die alte Codepage des Systems zu verwenden, weshalb es so eine schlechte Idee ist, sie normalerweise zu verwenden. Diese Kodierung existiert nur für Nicht-Unicode-Anwendungen, aber Textdateien sind oft auch in dieser Kodierung. Wenn die XML-Datei zu Recht UTF-8 deklariert, sollte der von Ihnen gepostete Code nichts schaden. Eine andere Möglichkeit, dies zu vermeiden, wäre, wenn Ihre Ersetzungen keine Nicht-ASCII-Zeichen enthalten, einfach Standard zum Lesen von * und * Schreiben zu verwenden. Auf diese Weise wird alles, was nicht-ASCII ist, nur durchgelassen (wenn Sie eine 8-Bit-Legacy-Codepage verwenden; die meisten tun dies). – Joey