2009-02-06 12 views
5

Czy znasz jakiś sposób, który mógłbym programowo lub poprzez scrirpt przekształcić zestaw plików tekstowych zapisanych w kodowaniu znaków ansi, w kodowanie Unicode?skrypt do zapisania pliku jako Unicode

Chciałbym zrobić to samo, co ja, kiedy otwieram plik z notatnikiem i wybieram, aby zapisać go jako plik Unicode.

+0

Duplikat http://stackoverflow.com/questions/64860/best-way-to-convert-text-files-between-character-sets i zobacz także http://stackoverflow.com/questions/76482/powershell -setting-encoding-for-get-content-pipeline –

Odpowiedz

-1

Można użyć iconv. W systemie Windows możesz go używać pod Cygwin.

iconv -f from_encoding -t to_encoding file 
+3

Dlaczego zaakceptowana odpowiedź dotyczy Cygwin? Pytanie jest oznaczone jako powershell ... – guillermooo

+0

Tak, na początku szukałem rozwiązania Power Shell, ale okazało się, że to zadziałało naprawdę dobrze i mogłem również użyć cygwin. W każdym razie wszystkie podane odpowiedzi wydają się być prawidłowymi podejściami – river0

0

Skorzystaj z klasy System.IO.StreamReader (Aby odczytać zawartość pliku) razem z System.Text.Encoding.Encoding (Aby utworzyć obiekt klasy Encoder, który wykonuje kodowanie).

-1

pseudokod ...

Dim systemu, plik treści, NewFile, oldFile

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

Set System = CreateObject ("Scripting.FileSystemObject ...

Set plik = system.GetFile (" text1.txt ")

Zestaw oldFile = file.OpenAsTextStream (ForReading, AnsiFile)

zawartość = oldFile.ReadAll()

oldFile.Close

system.CreateTextFile "text1.txt"

Set plik = System .GetFile ("text1.txt")

Set newfile = file.OpenAsTextStream (ForWriting, UnicodeFile)

newFile.Write treści

newFile.Close

Nadzieja to podejście będzie działać ..

3

Najprostszym sposobem byłoby Get-Content "ścieżka/do/tekst/plik" | out-file 'name/of/file'.

Out-File has an -encoding parameter, którego domyślny jest kod Unicode.

Jeśli chciał skryptu partię nich, można zrobić coś takiego

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

można utworzyć nowy plik tekstowy i napisać bajty z oryginalnego pliku do nowego, umieszczając a „\ 0 'przed każdym oryginalnym bajtem (zakładając, że oryginalny plik tekstowy był w języku angielskim).

10

To może pracować dla Ciebie, ale zauważ, że będzie to chwycić każdy plik w bieżącym folderze:


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

samo używając aliasów dla zwięzłości:


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

Steven Murawski sugeruje zamiast tego użyj Out-File. Różnice między obydwoma cmdletami są następujące:

  • Out-File spróbuje sformatować dane wejściowe, które otrzymuje. Domyślnym kodowaniem jest
  • Out-File kodowanie Unicode, natomiast Set-Content używa domyślnego systemu.

Oto przykład zakładając plik test.txt nie istnieje w obu przypadkach:


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) 

W rzeczywistości, jeśli nie potrzebują żadnego konkretnego kodowania Unicode, można równie dobrze zrobić następujące przekonwertować plik tekstowy Unicode:


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

Out-File jest „operatorem przekierowania z optiona l parametry "sortów.