我正在使用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?
答案 0 :(得分:15)
您可以在写入文件之前更改$OutputEncoding变量。另一种选择是不使用&gt;运算符,而是直接管道输出到Out-File并使用-Encoding参数。
答案 1 :(得分:9)
>
重定向运算符是Out-File
的“快捷方式”。 Out-File
的默认编码是Unicode,但您可以将其编码为ASCII,因此请转而使用Out-File
:
Get-Content -Encoding ASCII $projFile.FullName |
% { $_ -replace '<FooterText>(.+)</FooterText>', $newFooter } |
Out-File $tmpfile -Encoding ASCII
答案 2 :(得分:7)
| sc filename
可以解决这个问题(sc是Set-Content的别名)
for >> filename
使用| ac filename
可以解决问题(ac是Add-Content的别名)
答案 3 :(得分:2)
我发现我必须使用以下内容:
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
无效
答案 4 :(得分:1)
您可以将输出文件的默认编码设置为ascii:
$PSDefaultParameterValues=@{'out-file:encoding'='ascii'}
然后,类似这样的结果将生成一个ascii文件:
echo hi > out
在Powershell 6和7中,输出文件的默认编码已更改为utf8 no bom。
答案 5 :(得分:0)
只是使用流的一个小例子,虽然我意识到这不是原始问题。
C:\temp\ConfirmWrapper.ps1 -Force -Verbose 4>&1 6>&1 | Out-File -Encoding default -FilePath C:\temp\confirmLog.txt -Append
将输出信息(6)和详细(4)流输出到输出(1)流,并使用ANSI(默认)编码将所有这些流重定向到输出文件。