Conversión de UTF-16 a UTF-8 (para secuencias de comandos en Windows)
-
06-07-2019 - |
Pregunta
¿Cuál es la mejor manera de convertir un archivo UTF-16 a UTF-8? Necesito usar esto en un script cmd.
Solución
Existe una herramienta GNU recode que también puede usar en Windows. Por ejemplo,
recode utf16..utf8 text.txt
Otros consejos
Una alternativa a Ruby sería escribir un pequeño programa .NET en C # (.NET 1.0 estaría bien, aunque 2.0 sería más simple :) - es un código bastante trivial. ¿Esperaba hacerlo sin ninguna otra aplicación? Si desea un poco de código para hacerlo, agregue un comentario y completaré la respuesta ...
EDITAR: De acuerdo, esto es sin ningún tipo de comprobación de errores, pero ...
using System;
using System.IO;
using System.Text;
class FileConverter
{
static void Main(string[] args)
{
string inputFile = args[0];
string outputFile = args[1];
using (StreamReader reader = new StreamReader(inputFile, Encoding.Unicode))
{
using (StreamWriter writer = new StreamWriter(outputFile, false, Encoding.UTF8))
{
CopyContents(reader, writer);
}
}
}
static void CopyContents(TextReader input, TextWriter output)
{
char[] buffer = new char[8192];
int len;
while ((len = input.Read(buffer, 0, buffer.Length)) != 0)
{
output.Write(buffer, 0, len);
}
}
}
Ciertamente, la forma más fácil es cargar el script en el bloc de notas y luego guardarlo nuevamente con la codificación UTF-8. Es una opción en el cuadro de diálogo Guardar como ...
¿Quizás con iconv ?
Si tiene instalada una distribución ruby, puede llamar a un script ruby ??que se encargue de la conversión:
Script Ruby para convertir codificación de caracteres de archivo (s)
En el mismo espíritu: script Perl
En ausencia de soporte de script, tendría que codificarlo así fuente C ++ utilizando una llamada WideCharToMultiByte () ...
Puede hacerlo fácilmente con los cmdlets integrados de PowerShell, que puede invocar desde cmd:
C:\> powershell -c "Get-Content mytext.txt | Set-Content -Encoding utf8 mytext_utf8.txt"