Powershell:为获取内容管道设置编码
Posted
技术标签:
【中文标题】Powershell:为获取内容管道设置编码【英文标题】:Powershell: Setting Encoding for Get-Content Pipeline 【发布时间】:2010-09-09 17:47:46 【问题描述】:我有一个保存为 UCS-2 Little Endian 的文件我想更改编码,所以我运行了以下代码:
cat tmp.log -encoding UTF8 > new.log
生成的文件仍在 UCS-2 Little Endian 中。这是因为管道总是采用这种格式吗?有没有一种简单的方法可以将它作为 UTF8 传输到新文件?
【问题讨论】:
所以 UCS-2 Little Endian 是 utf16-le。 【参考方案1】:如建议here:
Get-Content tmp.log | Out-File -Encoding UTF8 new.log
【讨论】:
感谢您回答这个问题...它帮助我解决了读取 UTF-8 编码的 xml 文件时遇到的问题 见***.com/questions/5596982/… 获取内容 hgrc.tmp | Out-File -Encoding ASCII hgrc 保存了我的 bitbucket 脚本。谢谢。【参考方案2】:我会这样做:
get-content tmp.log -encoding Unicode | set-content new.log -encoding UTF8
我的理解是 -encoding 选项选择了文件应该被读取或写入的编码。
【讨论】:
“Get-Help Set-Content”没有将 -encoding 识别为一个选项,但它确实有效。 @jedatu:那是因为这个参数来自文件系统提供者。【参考方案3】:从带有编码的 xml 文件中加载内容。
(Get-Content -Encoding UTF8 $fileName)
【讨论】:
不要使用Get-Content
读取XML 文件,因为这需要事先了解文件编码。让 XML 解析器自己读取文件要好得多,因为这可以正确处理文件可能具有的任何编码。 $xml = (New-Object System.Xml.XmlDocument).Load($fileName)
【参考方案4】:
如果您正在读取 XML 文件,这里有一个更好的方法来适应您的 XML 文件的编码:
$xml = New-Object -Typename XML
$xml.load('foo.xml')
【讨论】:
【参考方案5】:PowerShell 的 get-content/set-content 编码标志不能处理所有编码类型。您可能需要使用 IO.File,例如使用 Windows-1252 加载文件:
$myString = [IO.File]::ReadAllText($filePath, [Text.Encoding]::GetEncoding(1252))
Text.Encoding::GetEncoding Text.Encoding::GetEncodings
【讨论】:
以上是关于Powershell:为获取内容管道设置编码的主要内容,如果未能解决你的问题,请参考以下文章