utf8 page must cp65001 code chcp windows powershell utf-8 batch-file

windows - page - cmd utf8



Convierte archivos de Windows a UNIX a través de Powershell o Batch (2)

No puede hacer esto sin herramientas externas en archivos por lotes.

Si todo lo que necesita es la codificación del archivo, entonces el fragmento que proporcionó debería funcionar. Si desea convertir los archivos en línea (en lugar de escribirlos en otro lugar) puede hacer

Get-ChildItem *.txt | ForEach-Object { (Get-Content $_) | Out-File -Encoding UTF8 $_ }

(Los paréntesis alrededor de Get-Content son importantes) Sin embargo, esto escribirá los archivos en UTF-8 con una firma al inicio (U + FEFF) que algunas herramientas de Unix no aceptan (aunque es técnicamente legal, aunque desaconsejado) utilizar).

Luego está el problema de que los saltos de línea son diferentes entre Windows y Unix. Unix usa solo U + 000A (LF) mientras que Windows usa dos caracteres para eso: U + 000D U + 000A (CR + LF). Así que, idealmente, convertirías los saltos de línea también. Pero eso se vuelve un poco más complejo:

Get-ChildItem *.txt | ForEach-Object { # get the contents and replace line breaks by U+000A $contents = [IO.File]::ReadAllText($_) -replace "`r`n?", "`n" # create UTF-8 encoding without signature $utf8 = New-Object System.Text.UTF8Encoding $false # write the text back [IO.File]::WriteAllText($_, $contents, $utf8) }

Tengo una secuencia de comandos por lotes que solicita al usuario una entrada y luego genera un par de archivos que estoy usando en un entorno AIX. Estos archivos deben estar en formato UNIX (que creo que es UTF8), pero estoy buscando alguna dirección en la forma MÁS SENCILLA de hacerlo.

No me gusta tener que descargar paquetes de software adicionales; Cygwin o GnuWin32. No me importa codificar esto si es posible, mis opciones de codificación son Batch, Powershell y VBS. ¿Alguien sabe de una manera de hacer esto?

Alternativamente, ¿podría crear los archivos con Batch y llamar a un script de Powershell para reformarlos?

La idea aquí es que se le solicite a un usuario cierta información, luego obtengo un archivo estándar que básicamente son respuestas rápidas en AIX para un trabajo. Inicialmente uso Batch, porque no sabía que me encontraría con este problema, pero me inclino a rehacer esto en Powershell. porque había encontrado algún código en otro foro que puede hacer la conversión (abajo).

% foreach($i in ls -name DIR/*.txt) { / get-content DIR/$i | / out-file -encoding utf8 -filepath DIR2/$i / }

Buscando alguna dirección o alguna entrada sobre esto.


Pruebe la versión sobrecargada ReadAllText (String, Encoding) si está usando caracteres ANSI y no solo ASCII.

$contents = [IO.File]::ReadAllText($_, [Text.Encoding]::Default) -replace "`r`n", "`n"

https://msdn.microsoft.com/en-us/library/system.io.file.readalltext(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx
ASCII - Obtiene una codificación para el conjunto de caracteres ASCII (7 bits).
Predeterminado: Obtiene una codificación para la página de códigos ANSI actual del sistema operativo.