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:为获取内容管道设置编码的主要内容,如果未能解决你的问题,请参考以下文章

将 PowerShell 的默认输出编码更改为 UTF-8

CSV 脚本的 PowerShell 获取计数器,编码问题

查询结果设置为变量 - powershell

为自动执行设置 PowerShell 脚本

win10下,cmd,power shell设置默认编码为‘UTF-8

PowerShell ForEach / 管道混乱