在 Windows 批处理脚本中将文本文件从 ansi 转换为 UTF-8

在 Windows 批处理脚本中将文本文件从 ansi 转换为 UTF-8

我们有一个默认为 ANSI 格式的文本文件,需要将其转换为 UTF-8 格式。我们有没有办法使用常规 Windows DOS 命令来转换文件?我们可以使用 PowerShell,但只有此命令行必须从不同的批处理进程运行。

答案1

PowerShell 语法相当简单。此命令以默认编码打开文件并将其保存为带 BOM 的 UTF-8:

Get-Content <SrcFile.txt> -Encoding Oem | Out-File <DestFile.txt> -Encoding utf8

Encoding参数接受以下内容Ascii, BigEndianUnicode, BigEndianUTF32, Byte, Default, Oem, String, Unicode, Unknown, UTF32, UTF7, UTF8

答案2

Get-Content 可能不是最佳选择,因为它逐行处理输入文件(至少默认情况下,如果您不使用Raw后面描述的开关),并且可能会导致更改行尾(例如,如果您在 Unix 和 Windows 系统之间移动文本文件)。我在一个脚本中遇到了严重的问题,就是因为这个原因,花了大约一个小时才找到确切的原因。有关更多信息,请参阅这个帖子。由于这种行为,如果性能很重要的话,Get-Content 也不是最好的选择。

除此之外,您还可以将 PowerShell 与 .NET 类结合使用(只要您的系统上安装了某个版本的 .NET Framework):

$sr = New-Object System.IO.StreamReader($infile) 
$sw = New-Object System.IO.StreamWriter($outfile, $false, [System.Text.Encoding]::Default)

$sw.Write($sr.ReadToEnd())

$sw.Close()
$sr.Close() 
$sw.Dispose()
$sr.Dispose()

或者更简单地使用Raw如下描述的开关这里为了避免这种开销并在单个块中读取文本:

Get-Content $inFile -Raw

相关内容