就是不能让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))