Использование перенаправления в скрипте приводит к выводу Unicode. Как создать однобайтовый текст ASCII? - PullRequest
14 голосов
/ 10 ноября 2009

Я использую Sandcastle Helpfile Builder для создания файла справки (.chm). Проект представляет собой файл .shfbproj, который имеет формат XML, работает с msbuild.

Я хочу автоматически обновить текст нижнего колонтитула, который появляется в сгенерированном файле .chm. Я использую этот фрагмент:

$newFooter = "<FooterText>MyProduct v1.2.3.4</FooterText>";

get-content  -Encoding ASCII $projFile.FullName | 
    %{$_ -replace '<FooterText>(.+)</FooterText>', $newFooter } > $TmpFile

move-item $TmpFile $projFile.FullName -force

Вывод, направленный в $ TmpFile, всегда является многобайтовой строкой. Но я этого не хочу. Как установить кодировку вывода в ASCII?

Ответы [ 5 ]

15 голосов
/ 10 ноября 2009

Вы можете изменить переменную $ OutputEncoding перед записью в файл. Другой вариант - не использовать оператор>, а вместо этого направить напрямую в Out-File и использовать параметр -Encoding.

9 голосов
/ 10 ноября 2009

Оператор перенаправления > является «ярлыком» для Out-File. Кодировка Out-File по умолчанию - Unicode, но вы можете изменить его на ASCII, поэтому вместо него укажите Out-File:

Get-Content -Encoding ASCII $projFile.FullName |
    % { $_ -replace '<FooterText>(.+)</FooterText>', $newFooter } |
    Out-File $tmpfile -Encoding ASCII
7 голосов
/ 10 ноября 2009

| sc filename делает трюк (sc является псевдонимом для Set-Content)

для >> filename использование | ac filename делает трюк (ac - псевдоним для Add-Content)

2 голосов
/ 21 октября 2015

Я обнаружил, что должен был использовать следующее:

write-output "First line" | out-file -encoding ascii OutputFileName
write-output "Next line" | out-file -encoding ascii -append OutputFileName
....

Изменение выходной кодировки с помощью:

$OutputEncoding = New-Object -typename System.Text.ASCIIEncoding

не работает

0 голосов
/ 19 января 2018

Просто небольшой пример использования потоков, хотя я понимаю, что это был не оригинальный вопрос.

C:\temp\ConfirmWrapper.ps1 -Force -Verbose 4>&1 6>&1 | Out-File -Encoding default -FilePath C:\temp\confirmLog.txt -Append

Выводит информационные (6) и подробные (4) потоки в выходной (1) поток и перенаправляет все это во внешний файл с кодировкой ANSI (по умолчанию).

...