Это может сработать для вас, но обратите внимание, что он захватит каждый файл в текущей папке:
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") }
Стивен Муравски предлагает вместо этого использовать 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
- это своего рода «оператор перенаправления с необязательными параметрами».