text - salen - detectar codificacion online
¿La mejor manera de convertir archivos de texto entre juegos de caracteres? (17)
Oneliner utilizando find, con detección automática.
La codificación de caracteres de todos los archivos de texto coincidentes se detecta automáticamente y todos los archivos de texto coincidentes se convierten a codificación utf-8
:
$ find . -type f -iname *.txt -exec sh -c ''iconv -f $(file -bi "$1" |sed -e "s/.*[ ]charset=//") -t utf-8 -o converted "$1" && mv converted "$1"'' -- {} /;
Para realizar estos pasos, se utiliza un shell de sub shell con -exec
, ejecutando una sola línea con el indicador -c
, y pasando el nombre del archivo como el argumento posicional "$1"
con -- {}
. En medio, el archivo de salida utf-8
se denomina temporalmente converted
.
Por file -bi
cual file -bi
significa:
-b, --enuncia
No agregue nombres de archivos a las líneas de salida (modo breve).-i, --mime
Hace que el comando de archivo genere cadenas de tipo mime en lugar de las más tradicionales legibles por humanos. Así puede decir ''texto / plano''; charset = us-ascii ''en lugar de "texto ASCII".
El comando de find
es muy útil para dicha automatización de gestión de archivos.
Haga clic aquí para find
más información en abundancia .
¿Cuál es la herramienta o el método más rápido y fácil para convertir archivos de texto entre conjuntos de caracteres?
Específicamente, necesito convertir de UTF-8 a ISO-8859-15 y viceversa.
Todo vale: una sola línea en su lenguaje de scripting favorito, herramientas de línea de comandos u otras utilidades para sistemas operativos, sitios web, etc.
Las mejores soluciones hasta ahora:
En Linux / UNIX / OS X / cygwin:
Gnu iconv sugerido por Troels Arvin se utiliza mejor como filtro . Parece estar universalmente disponible. Ejemplo:
$ iconv -f UTF-8 -t ISO-8859-15 in.txt > out.txt
Como señaló Ben , hay un convertidor en línea que usa iconv .
Gnu recode ( manual ) sugerido por Cheekysoft convertirá uno o varios archivos en el lugar . Ejemplo:
$ recode UTF8..ISO-8859-15 in.txt
Éste usa alias más cortos:
$ recode utf8..l9 in.txt
Recode también admite superficies que se pueden usar para convertir entre diferentes tipos de terminaciones de líneas y codificaciones:
Convertir líneas nuevas de LF (Unix) a CR-LF (DOS):
$ recode ../CR-LF in.txt
Base64 codifica el archivo:
$ recode ../Base64 in.txt
También puedes combinarlos.
Convierta un archivo UTF8 codificado en Base64 con terminaciones de línea Unix en un archivo Latin 1 codificado en Base64 con terminaciones de línea Dos:
$ recode utf8/Base64..l1/CR-LF/Base64 file.txt
En Windows con PowerShell ( Jay Bazuzi ):
PS C:/> gc -en utf8 in.txt | Out-File -en ascii out.txt
(Sin embargo, no es compatible con ISO-8859-15; dice que los conjuntos de caracteres compatibles son Unicode, utf7, utf8, utf32, ascii, bigendianunicode, predeterminado y OEM).
Editar
¿Quiere decir soporte iso-8859-1? Usando "String" hace esto por ejemplo para viceversa
gc -en string in.txt | Out-File -en utf8 out.txt
Nota: Los valores de enumeración posibles son "Desconocido, Cadena, Unicode, Byte, BigEndianUnicode, UTF8, UTF7, Ascii".
- CsCvt: el convertidor de conjuntos de caracteres de Kalytta es otra excelente herramienta de conversión basada en línea de comandos para Windows.
Prueba Notepad ++
En Windows pude usar Notepad ++ para hacer la conversión de ISO-8859-1 a UTF-8 . Haga clic en "Encoding"
y luego en "Convert to UTF-8"
.
Prueba VIM
Si tienes vim
puedes usar esto:
No probado para cada codificación.
La mejor parte de esto es que no tienes que saber la codificación de origen
vim +"set nobomb | set fenc=utf8 | x" filename.txt
Tenga en cuenta que este comando modifica directamente el archivo.
Parte explicacion
-
+
: Usado por vim para ingresar directamente el comando al abrir un archivo. Usualmente se usa para abrir un archivo en una línea específica:vim +14 file.txt
-
|
: Separador de comandos múltiples (como;
en bash) -
set nobomb
: no utf-8 BOM -
set fenc=utf8
: establece una nueva codificación para utf-8 doc link -
x
: guardar y cerrar archivo -
filename.txt
: ruta al archivo -
"
: los qotes están aquí debido a las tuberías. (de lo contrario, bash los usará como tubería bash)
Prueba la función iconv Bash
He puesto esto en .bashrc
:
utf8()
{
iconv -f ISO-8859-1 -t UTF-8 $1 > $1.tmp
rm $1
mv $1.tmp $1
}
..para poder convertir archivos así:
utf8 MyClass.java
Bajo Linux, puede usar el muy poderoso comando de recodificación para intentar convertir entre los diferentes conjuntos de caracteres, así como cualquier problema de final de línea. recode -l le mostrará todos los formatos y codificaciones que la herramienta puede convertir. Es probable que sea una lista MUY larga.
Como se describe en ¿Cómo corrijo la codificación de caracteres de un archivo? Synalyze It! le permite convertir fácilmente en OS X entre todas las codificaciones admitidas por la biblioteca de ICU .
Además, puede visualizar algunos bytes de un archivo traducido a Unicode de todas las codificaciones para ver rápidamente cuál es la correcta para su archivo.
Con rubi
ruby -e "File.write(''output.txt'', File.read(''input.txt'').encode(''UTF-8'', ''binary'', invalid: :replace, undef: :replace, replace: ''''))"
Fuente: https://robots.thoughtbot.com/fight-back-utf-8-invalid-byte-sequences
DOS / Windows: usar página de código
chcp 65001>NUL
type ascii.txt > unicode.txt
El comando chcp
se puede usar para cambiar la página de códigos. La página de códigos 65001 es el nombre de Microsoft para UTF-8. Después de configurar la página de códigos, la salida generada por los siguientes comandos será del conjunto de páginas de códigos.
Enfoque de utilidad independiente
iconv -f UTF-8 -t ISO-8859-1 in.txt > out.txt
-f ENCODING the encoding of the input -t ENCODING the encoding of the output
Mi herramienta favorita para esto es Jedit (un editor de texto basado en Java) que tiene dos características muy convenientes:
- Una que permite al usuario volver a cargar un texto con una codificación diferente (y, como tal, controlar visualmente el resultado)
- Otro que permite al usuario elegir explícitamente la codificación (y el carácter de fin de línea) antes de guardar
PHP iconv ()
iconv("UTF-8", "ISO-8859-15", $input);
Simplemente cambie la codificación del archivo cargado en IntelliJ IDEA IDE, a la derecha de la barra de estado (parte inferior), donde se indica el conjunto de caracteres actual. Se le pide que recargue o convierta, use Convertir. Asegúrese de hacer una copia de seguridad del archivo original por adelantado.
Use este script de Python: https://github.com/goerz/convert_encoding.py Funciona en cualquier plataforma. Requiere Python 2.7.
para escribir el archivo de propiedades (Java), normalmente lo uso en linux (distribuciones mint y ubuntu):
$ native2ascii filename.properties
Por ejemplo:
$ cat test.properties
first=Execução número um
second=Execução número dois
$ native2ascii test.properties
first=Execu/u00e7/u00e3o n/u00famero um
second=Execu/u00e7/u00e3o n/u00famero dois
PD: escribí la Ejecución número uno / dos en portugues para forzar caracteres especiales.
En mi caso, en primera ejecución recibí este mensaje:
$ native2ascii teste.txt
The program ''native2ascii'' can be found in the following packages:
* gcj-5-jdk
* openjdk-8-jdk-headless
* gcj-4.8-jdk
* gcj-4.9-jdk
Try: sudo apt install <selected package>
Cuando instalé la primera opción (gcj-5-jdk) el problema se terminó.
Espero que esto ayude a alguien.
iconv -f FROM-ENCODING -t TO-ENCODING file.txt
También hay herramientas basadas en iconv en muchos idiomas.
Get-Content -Encoding UTF8 FILE-UTF8.TXT | Out-File -Encoding UTF7 FILE-UTF7.TXT
La versión más corta, si puede asumir que la entrada de la lista de materiales es correcta:
gc FILE.TXT | Out-File -en utf7 file-utf7.txt