Powershell:设置Get-Content管道的编码

49

我有一个保存为UCS-2 Little Endian格式的文件,想要改变编码方式。我运行了以下代码:

cat tmp.log -encoding UTF8 > new.log

最终生成的文件仍然是UCS-2 Little Endian格式。这是因为管道在该格式下操作,是否有一种简单的方法将其导出为UTF8格式的新文件?


UCS-2 Little Endian 就是 utf16-le。 - js2010
5个回答

58

此处所建议的:

Get-Content tmp.log | Out-File -Encoding UTF8 new.log

谢谢您的回答,它帮助我解决了一个读取采用UTF-8编码的XML文件的问题。 - Peter Walke
2
请参见 https://dev59.com/SG035IYBdhLWcg3wJcjT。 - Lars Truijens
Get-Content hgrc.tmp | Out-File -Encoding ASCII hgrc 保存了我的 Bitbucket 脚本。谢谢。 - sonjz

37

我会这样做:

get-content tmp.log -encoding Unicode | set-content new.log -encoding UTF8

我理解的是,-encoding选项选择文件应该读取或写入的编码。


12
"Get-Help Set-Content" 命令无法识别 "-encoding" 作为一个选项,但实际上它可以正常工作。 - jedatu
10
那是因为这个参数来自于文件系统提供程序。 - Joey
为什么Get-Content不遵守控制台编码设置[Console] :: OutputEncoding = [System.Text.Encoding] :: UTF8 - brettinternet

8
从带有编码的xml文件中加载内容。
(Get-Content -Encoding UTF8 $fileName)

1
不要使用Get-Content读取XML文件,因为这需要事先了解文件编码。最好让XML解析器自行读取文件,因为它可以正确处理文件可能具有的任何编码。$xml = (New-Object System.Xml.XmlDocument).Load($fileName) - Tomalak

1
如果您正在阅读一个XML文件,这里有一种更好的方法可以适应您的XML文件编码:
$xml = New-Object -Typename XML
$xml.load('foo.xml')

0

PowerShell的get-content/set-content编码标志无法处理所有编码类型。例如,您可能需要使用IO.File来使用Windows-1252加载文件:

$myString = [IO.File]::ReadAllText($filePath, [Text.Encoding]::GetEncoding(1252))

Text.Encoding::GetEncoding Text.Encoding::GetEncodings


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接