我想用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编码。 根据{{3}}文档,这也是一个有效的StreamWriter构造函数来定义编码。
我错过了什么?
汤姆
答案 0 :(得分:3)
您遗漏的是C:\new.txt
仍然是字符串,而不是 Stream
对象。这意味着您正在调用StreamWriter(String, Boolean)
构造函数,而不是StreamWriter(Stream, Encoding)
构造函数。在此上下文中,$encoding
为implicitly converted为布尔值。前一个构造函数创建了一个UTF-8编写器,如下所示:
<强>说明强>
此构造函数使用UTF-8编码创建一个没有字节顺序标记的StreamWriter [...]