¿Cuál es la herramienta o 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: frases en su lenguaje de programación favorito, herramientas de línea de comandos u otras utilidades para SO, sitios web, etc.
Las mejores soluciones hasta ahora:
En Linux / UNIX / OS X / cygwin:
El ícono de Gnu sugerido por Troels Arvin se usa 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
Este 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 terminación de línea y codificaciones:
Convierta nuevas líneas de LF (Unix) a CR-LF (DOS):
$ recode ../CR-LF in.txt
Archivo de codificación Base64:
$ recode ../Base64 in.txt
También puedes combinarlos.
Convierta un archivo UTF8 codificado en Base64 con terminaciones de línea Unix a 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 charsets compatibles son unicode, utf7, utf8, utf32, ascii, bigendianunicode, default y oem).
Editar
¿Te refieres al soporte iso-8859-1? Usar "String" hace esto, por ejemplo, viceversa.
gc -en string in.txt | Out-File -en utf8 out.txt
Nota: Los posibles valores de enumeración son "Desconocido, Cadena, Unicode, Byte, BigEndianUnicode, UTF8, UTF7, Ascii".
- CsCvt - Kalytta's Character Set Converter es otra gran herramienta de conversión basada en línea de comandos para Windows.
fuente
gc -en Ascii readme.html | Out-File -en UTF8 readme.html
pero convierte el archivo a utf-8 pero luego está vacío. Notepad ++ dice que el archivo tiene formato Ansi, pero leerlo como lo entiendo, ¿eso ni siquiera es un juego de caracteres válido? uk.answers.yahoo.com/question/index?qid=20100927014115AAiRExFrecode
también actuará como filtro si no le pasa ningún nombre de archivo, por ejemplo:recode utf8..l9 < in.txt > out.txt
enca
, no necesita especificar la codificación de entrada. A menudo es suficiente con especificar el idioma:enca -L ru -x utf8 FILE.TXT
.iconv -f UTF-32 -t UTF-8 input.csv > output.csv
solo se guardó setecientas mil líneas, solo un tercio. El uso de la versión in situiconv -f UTF-32 -t UTF-8 file.csv
convirtió con éxito las más de 2 millones de líneas.Respuestas:
Enfoque de utilidad independiente
No tiene que especificar ninguno de estos argumentos. Se establecerán de manera predeterminada en su ubicación actual, que generalmente es UTF-8.
fuente
iconv -l | grep UTF
le dirá todas las codificaciones relacionadas con UTF que admite su copia de iconv.chardet in.txt
para generar una mejor suposición. El resultado puede usarse como CODIFICACIÓN eniconv -f ENCODING
.illegal input sequence at position
mensajes), y reemplazar los caracteres "extraños" con caracteres "similares":iconv -c -f UTF-8 -t ISO-8859-1//TRANSLIT in.txt > out.txt
.ex
) a continuación . Información adicional: (1) usted (probablemente) no necesita especificar la-f
opción (desde) coniconv
. (2) elfile --mime-encoding <file/s>
comando puede ayudarlo a descubrir la codificación en primer lugar.file
comando informó mi fuente como UTF-16 Little Endian; ejecutar loiconv -f UTF-16 -t UTF-8...
transformó incorrectamente a ASCII, tuve que especificar explícitamente laiconv -f UTF-16LE...
salida UTF-8Prueba VIM
Si usted tiene
vim
puedes usar esto:No probado para cada codificación.
Lo bueno de esto es que no tienes que saber la codificación de origen
Tenga en cuenta que este comando modifica directamente el archivo
Explicación parte!
+
: Utilizado 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 múltiples comandos (como;
en bash)set nobomb
: sin utf-8 BOMset fenc=utf8
: Establece una nueva codificación en el enlace de documento utf-8x
: Guardar y cerrar archivofilename.txt
: ruta al archivo"
: qotes están aquí debido a las tuberías. (de lo contrario, bash los usará como tubería de bash)fuente
vim -b
ohead file.txt|cat -e
find -regextype posix-extended -type f -regex ".*\.(h|cpp|rc|fx|cs|props|xaml)" -exec vim +'set nobomb | set fenc=utf8 | x' {} \;
En Linux, puede usar el comando de recodificación muy poderoso 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.
fuente
LF
? Hay/CR
y/CR-LF
no hay/LF
iconv (1)
También hay herramientas basadas en iconv en muchos idiomas.
fuente
La versión más corta, si puede suponer que la lista de materiales de entrada es correcta:
fuente
gc .\file-utf8.txt | sc -en utf7 .\file-utf7.txt
Set-Content
funciona mejor queOut-File
?file-utf8.txt
archivo para la entrada ya que ambas tenían el mismo archivo de salida quefile-utf7.txt
.gc -en Ascii readme.html | Out-File -en UTF8 readme.html
pero convierte el archivo a utf-8 pero luego está vacío. Notepad ++ dice que el archivo tiene formato Ansi, pero leerlo como lo entiendo, ¿eso ni siquiera es un juego de caracteres válido? uk.answers.yahoo.com/question/index?qid=20100927014115AAiRExFPrueba la función iconv Bash
He puesto esto en
.bashrc
:..para poder convertir archivos así:
fuente

al comienzo del archivo.Prueba Notepad ++
En Windows pude usar Notepad ++ para hacer la conversión de ISO-8859-1 a UTF-8 . Haga clic
"Encoding"
y luego"Convert to UTF-8"
.fuente
Oneliner usando find, con detección automática de juego de caracteres
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
utf-8
codificación:Para realizar estos pasos,
sh
se utiliza un subconjunto con-exec
, ejecutando una línea con la-c
bandera y pasando el nombre del archivo como argumento posicional"$1"
con-- {}
. En el medio, elutf-8
archivo de salida se nombra temporalmenteconverted
.Por lo que
file -bi
significa:-b
,--brief
No anteponga nombres de archivo 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 legibles por humanos. Por lo tanto, puede decir, por ejemplo, entext/plain; charset=us-ascii
lugar deASCII text
. Elsed
comando corta esto solous-ascii
como lo requiereiconv
.El
find
comando es muy útil para dicha automatización de gestión de archivos. Haga clic aquí para másfind
abundancia .fuente
find . -type f -iname *.txt -exec sh -c 'iconv -f $(file -b --mime-encoding "$1" | awk "{print toupper(\$0)}") -t UTF-8 > converted "$1" && mv converted "$1"' -- {} \;
sed
comando está ahí a propósito, lo que permite la detección automática de la codificación de caracteres. He ampliado la respuesta para explicar esto ahora. Sería cortés con respecto a los lectores eliminar cualquier comentario irrelevante restante. Gracias.PHP iconv ()
iconv("UTF-8", "ISO-8859-15", $input);
fuente
DOS / Windows: use la página de códigos
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.fuente
para escribir el archivo de propiedades (Java) normalmente lo uso en Linux (distribuciones mint y ubuntu):
Por ejemplo:
PD: escribí la Ejecución número uno / dos en portugues para forzar caracteres especiales.
En mi caso, en la primera ejecución recibí este mensaje:
Cuando instalé la primera opción (gcj-5-jdk) el problema estaba terminado.
Espero que esto ayude a alguien.
fuente
Con rubí:
Fuente: https://robots.thoughtbot.com/fight-back-utf-8-invalid-byte-sequences
fuente
Use este script de Python: https://github.com/goerz/convert_encoding.py Funciona en cualquier plataforma. Requiere Python 2.7.
fuente
Mi herramienta favorita para esto es Jedit (un editor de texto basado en Java) que tiene dos características muy convenientes:
fuente
Simplemente cambie la codificación del archivo cargado en IntelliJ IDEA IDE, a la derecha de la barra de estado (abajo), donde se indica el juego de caracteres actual. Solicita Recargar o Convertir, use Convertir. Asegúrese de hacer una copia de seguridad del archivo original por adelantado.
fuente
Si las aplicaciones de la GUI de macOS son su pan de cada día, SubEthaEdit es el editor de texto al que suelo para la codificación y la disputa: su "vista previa de conversión" le permite ver todos los caracteres no válidos en la codificación de salida y corregirlos / eliminarlos.
Y ahora es de código abierto , así que para ellos 😉.
fuente
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 compatibles con la biblioteca ICU .
Además, puede mostrar algunos bytes de un archivo traducido a Unicode de todas las codificaciones para ver rápidamente cuál es el correcto para su archivo.
fuente