【问题标题】:Powershell: Setting Encoding for Get-Content PipelinePowershell:为获取内容管道设置编码
【发布时间】: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。

标签: encoding powershell


【解决方案1】:

如建议here:

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

【讨论】:

  • 感谢您回答这个问题...它帮助我解决了读取 UTF-8 编码的 xml 文件时遇到的问题
  • 获取内容 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

    【讨论】:

      猜你喜欢
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      相关资源
      最近更新 更多