ASCII编码在powershell中不工作



就是不能让ASCII编码在PowerShell中工作。我试了很多不同的方法

无论我尝试什么,我得到一个UTF8编码文件(这就是NPP告诉我的):

$newLine = "Ein Test öäü"
$newLine | Out-File -FilePath "c:tempcheck.txt"  -Encoding ascii

PSVersion = 5.1.14393.5066

欢迎任何提示!

ASCII是7位字符集,不包含任何重音字符,所以很明显,用ASCII存储öäü是行不通的。如果需要UTF-8则需要指定编码为utf8

$newLine = "Ein Test öäü"
$newLine | Out-File -FilePath "c:tempcheck.txt" -Encoding utf8

如果需要另一种编码,则相应地指定它。例如,要获取ANSI代码页,请使用

$newLine = "Ein Test öäü"
$newLine | Out-File -FilePath "c:tempcheck.txt" -Encoding default

-Encoding default将文件保存在当前的ANSI代码页,-Encoding oem将使用当前的OEM代码页。只要在-Encoding之后按Tab, PowerShell就会循环查看支持的编码列表。对于不在列表中的编码,您可以使用System.Text.Encoding

简单地处理它们注意"ANSI代码页"是一个用词不当,实际的编码根据每个环境而变化,所以它不可靠。例如,如果您手动更改代码页,那么它将不再工作。为了获得更可靠的行为,您需要显式指定编码(通常为西欧语言的Windows-1252)。在旧的PowerShell中使用

[IO.File]::WriteAllLines("c:tempcheck.txt", $newLine, [Text.Encoding]::GetEncoding(1252)

在PowerShell Core中你可以使用

$newLine | Out-File -FilePath "check2.txt" -Encoding ([Text.Encoding]::GetEncoding(1252))

参见我如何改变我的Powershell脚本,使它在ANSI - Windows-1252编码中输出文件?

找到解决方案:

$file    = "c:tempcheck-ansi.txt"
$newLine = "Ein Test öÖäÄüÜ"

Remove-Item $file
[IO.File]::WriteAllLines($file, $newLine, [Text.Encoding]::GetEncoding(28591))

最新更新