【问题标题】:StreamWriter(Stream, Encoding) not working in PowerShellStreamWriter(Stream, Encoding) 在 PowerShell 中不起作用
【发布时间】:2018-07-13 05:40:49
【问题描述】:

我想使用 Powershell 将文件从 UTF-16 转换为 ANSI,但遇到了一些我不理解的行为。

我的(简化的)脚本是

$encoding = [System.Text.Encoding]::GetEncoding(1250)

$sr = New-Object System.IO.StreamReader -Arg c:\utf16.txt
$sw = New-Object System.IO.StreamWriter c:\new.txt, $false, $encoding

 while ($line = $sr.ReadLine()) {
    $sw.WriteLine($line)
 }

$sr.close()
$sw.Close()

这很好用,输出 new.txt 是 ANSI 编码 但是,如果我改变了

$sw = New-Object System.IO.StreamWriter c:\new.txt, $false, $encoding

$sw = New-Object System.IO.StreamWriter c:\new.txt, $encoding

输出 new.txt 采用 UTF-8 编码。 根据StreamWriter Class 文档,这也是定义编码的有效StreamWriter 构造函数。

我错过了什么?

汤姆

【问题讨论】:

  • Get-Content -Path $Path -Encoding Unicode | Set-Content -Path C:\new.txt -Encoding ASCII

标签: powershell streamwriter


【解决方案1】:

你错过了C:\new.txt 仍然是一个字符串,而不是一个Stream对象。这意味着您正在调用 StreamWriter(String, Boolean) 构造函数,而不是 StreamWriter(Stream, Encoding) 构造函数。在这种情况下,$encodingimplicitly converted 布尔值。前一个构造函数创建了一个 UTF-8 编写器,如文档所述:

备注

这个构造函数创建一个没有字节顺序标记的 UTF-8 编码的 StreamWriter [...]

【讨论】:

    猜你喜欢
    • 2017-11-27
    • 2015-04-28
    • 2023-03-25
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 2012-06-18
    • 2016-10-17
    相关资源
    最近更新 更多