我用这个问题的答案:Using PowerShell to write a file in UTF-8 without the BOM
将文件(UCS-2
)编码为UTF-8
。问题是,如果我运行编码两次(或更多次),则Cyrillic
文本被破坏。如果文件已经在UTF-8
中,如何停止编码?
代码是:
$MyFile = Get-Content $MyPath
$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
[System.IO.File]::WriteAllLines($MyPath, $MyFile, $Utf8NoBomEncoding)
使用:
$MyFile = Get-Content -Encoding UTF8 $MyPath
$MyPath
是UTF-16LE编码(“Unicode
”编码,我认为是你的意思)时,PowerShell将忽略-Encoding
参数,因为文件中存在BOM,这明确地标识了编码。
如果您的原始文件没有BOM,则需要做更多工作。$MyPath
保存为没有BOM的UTF-8,你必须告诉Windows PowerShell [1]你期望用-Encoding UTF8
进行UTF-8编码,因为它将文件解释为“ANSI” - 默认编码(根据典型的单个编码)与遗留系统区域设置关联的字节代码页。[1]请注意,cross-platform PowerShell Core edition默认为无BOM的UTF-8。