2009-02-06 3 views
5

Знаете ли вы, каким образом я мог бы программно или с помощью scrirpt преобразовать набор текстовых файлов, сохраненных в кодировке ansi, в кодировку Unicode?скрипт для сохранения файла как unicode

Я хотел был бы сделать то же самое, что и я, когда открываю файл с помощью блокнота и выбираю сохранить его в виде файла юникода.

+0

Дубликат http://stackoverflow.com/questions/64860/best-way-to-convert-text-files-between-character-sets, а также см. Http://stackoverflow.com/questions/76482/powershell -setting-encoding-for-get-content-pipe –

ответ

-1

Вы можете использовать Iconv. В Windows вы можете использовать его под Cygwin.

iconv -f from_encoding -t to_encoding file 
+3

Почему принимаемый ответ связан с Cygwin? Этот вопрос отмечен как powershell ... – guillermooo

+0

Да, в начале я искал решение powershell, но оказалось, что это сработало очень хорошо для меня, и я мог бы также использовать cygwin. В любом случае все приведенные ответы представляют собой действительные подходы – river0

0

Используйте класс System.IO.StreamReader (чтобы прочитать содержимое файла) вместе с System.Text.Encoding.Encoding (для создания базового класса Encoder, который выполняет кодирование).

-1

псевдокод ...

Dim система, файл, содержание, NewFile, старый_файл

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

Комплект системы = CreateObject ("Scripting.FileSystemObject ...

Установить файл = system.GetFile (" text1.txt ")

Набор старый_файл = file.OpenAsTextStream (ForReading, AnsiFile)

содержание = oldFile.ReadAll()

oldFile.Close

system.CreateTextFile "text1.txt"

Установить файл = системы .GetFile ("text1.txt")

Набор NewFile = file.OpenAsTextStream (ForWriting, UnicodeFile)

содержание newFile.Write

newFile.Close

Надежда этот подход будет работать ..

3

Самый простой способ - это путь «Получить/Контент/путь/текст/файл» | out-file 'name/of/file'.

Out-File has an -encoding parameter, по умолчанию это Unicode.

Если вы хотите, чтобы сценарий партии из них, вы могли бы сделать что-то вроде

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

Вы можете создать новый текстовый файл и записать байты из исходного файла в новом, помещая «\ 0 'перед каждым исходным байтом (если исходный текстовый файл был на английском языке).

10

Это может работать для вас, но обратите внимание, что он будет захватывать каждый файл в текущей папке:


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

То же самое с помощью псевдонимов для краткости:


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

Стивен Murawski наводит на мысль используя вместо этого Out-File. Различия между двумя командными командами следующие:

  • Out-File попытается отформатировать входной сигнал, который он получает.
  • Out-File По умолчанию кодировка используется на основе Unicode, тогда как Set-Content использует систему по умолчанию.

Вот пример предполагается, что файл test.txt не существует в любом случае:


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) 

В самом деле, если вам не нужна какая-либо конкретная кодировка Unicode, можно также сделать следующее преобразовать текстовый файл в кодировке Unicode:


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

Out-File является «перенаправление оператора с optiona l параметров ".

Смежные вопросы