Converte um arquivo de texto de ansi para UTF-8 no script em lote do Windows

0

Temos um arquivo de texto que está no formato ANSI padrão e que precisa ser convertido no formato UTF-8. Existe alguma maneira podemos usar os comandos gerais do Windows para converter o arquivo? Podemos usar o PowerShell, mas somente essa linha de comando precisa ser executada a partir de um processo em lote diferente.

    
por Raj 20.04.2017 / 09:07

2 respostas

2

A sintaxe do PowerShell é bastante direta. Este comando abre um arquivo na codificação padrão e o salva como UTF-8 com BOM:

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

O Encoding parâmetro aceita o seguinte : Ascii, BigEndianUnicode, BigEndianUTF32, Byte, Default, Oem, String, Unicode, Unknown, UTF32, UTF7, UTF8

    
por 20.04.2017 / 09:38
1

Get-Content pode não ser ideal, pois ele lida com o arquivo de entrada linha a linha (pelo menos, por padrão, se você não usar a opção Raw conforme descrito posteriormente) e pode causar a alteração da terminação da linha ( por exemplo, se você mover arquivos de texto entre sistemas Unix e Windows). Eu tive sérios problemas em um roteiro só porque isso, e levou cerca de uma hora para encontrar o motivo exato. Veja mais sobre isso em este post . Devido a esse comportamento, Get-Content também não é a melhor escolha, se o desempenho for importante.

Em vez disso, você pode usar o PowerShell em combinação com as classes .NET (contanto que você tenha uma versão do .NET Framework instalada em seu sistema):

$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()

Ou, ainda mais simples, use a opção Raw conforme descrito aqui para evitar essa sobrecarga e ler o texto em um único bloco:

Get-Content $inFile -Raw
    
por 05.07.2017 / 12:58