在脚本中使用重定向会生成unicode输出.如何发出单字节ASCII文本?

Che*_*eso 17 unicode powershell

我正在使用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
Run Code Online (Sandbox Code Playgroud)

定向到$ TmpFile的输出始终是一个多字节字符串.但我不希望这样.如何将输出的编码设置为ASCII?

tom*_*asr 16

您可以在写入文件之前更改$ OutputEncoding变量.另一个选项是不使用>运算符,而是直接管道输出到Out-File并使用-Encoding参数.

  • &gt; 运算符实际上是 out-file 的别名,默认为 utf。tomasr 是正确的,您应该专门使用 out-file 来设置编码。 (3认同)
  • `Out-File -Encoding` 建议很有帮助,但 `$OutputEncoding` 并不适用于此,因为它与 `&gt;` / `&gt;&gt;` 无关。其唯一目的是定义从 PowerShell 发送数据到外部程序时使用的编码。 (2认同)

Sha*_*evy 11

>重定向操作符是一个"捷径" Out-File.Out-File默认编码是Unicode,但您可以将其命名为ASCII,因此管道Out-File代替:

Get-Content -Encoding ASCII $projFile.FullName |
    % { $_ -replace '<FooterText>(.+)</FooterText>', $newFooter } |
    Out-File $tmpfile -Encoding ASCII
Run Code Online (Sandbox Code Playgroud)


Rub*_*ink 7

| sc filename 诀窍(sc是Set-Content的别名)

对于>> filename使用| ac filename的伎俩(AC是用于添加内容的别名)