Reputation: 192637
I am using Sandcastle Helpfile Builder to produce a helpfile (.chm). The project is a .shfbproj file, which is XML format, works with msbuild.
I want to automatically update the Footer text that appears in the generated .chm file. I use this snippet:
$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
The output directed to the $TmpFile is always a multi-byte string. But I don't want that. How do I set the encoding of the output to ASCII?
Upvotes: 24
Views: 16686
Reputation: 13859
You could change the $OutputEncoding variable before writing to the file. The other option is not to use the >
operator, but instead pipe directly to Out-File
and use the -Encoding
parameter.
Upvotes: 23
Reputation: 27606
You can set the default encoding of out-file to be ascii:
$PSDefaultParameterValues=@{'out-file:encoding'='ascii'}
Then something like this will result in an ascii file:
echo hi > out
In powershell 6 and 7, the default encoding of out-file was changed to utf8 no bom.
Upvotes: 3
Reputation: 126912
The >
redirection operator is a "shortcut" to Out-File
. Out-File
's default encoding is Unicode but you can change it to ASCII, so pipe to Out-File
instead:
Get-Content -Encoding ASCII $projFile.FullName |
% { $_ -replace '<FooterText>(.+)</FooterText>', $newFooter } |
Out-File $tmpfile -Encoding ASCII
Upvotes: 13
Reputation: 1317
Just a little example using streams, although I realize this wasn't the original question.
C:\temp\ConfirmWrapper.ps1 -Force -Verbose 4>&1 6>&1 | Out-File -Encoding default -FilePath C:\temp\confirmLog.txt -Append
Will output the information(6) and verbose(4) streams to the output(1) stream and redirect all that to the out-file with ANSI(default) encoding.
Upvotes: 2
Reputation: 141
I found I had to use the following:
write-output "First line" | out-file -encoding ascii OutputFileName
write-output "Next line" | out-file -encoding ascii -append OutputFileName
....
Changing the output encoding using:
$OutputEncoding = New-Object -typename System.Text.ASCIIEncoding
did not work
Upvotes: 4
Reputation: 61893
| sc filename
does the trick (sc being an alias for Set-Content)
for >> filename
use | ac filename
does the trick (ac being an alias for Add-Content)
Upvotes: 7