2012-05-21 18 views
5

Tengo un archivo de texto largo que usa codificaciones aparentemente diferentes en bloques de texto posteriores (iso o utf-8). Es el resultado de agregar texto usando >> file.bib y copiar y pegar de diferentes fuentes (páginas web).Corregir la codificación del archivo de texto codificado incoherentemente

Los bloques pueden, en principio, ser distinguidos como son bibtex entradas

@article{key, author={lastname, firstname}, ...} 

me gustaría convertirlo en un archivo coherente UTF-8, ya que parece chocar mi visor bibtex (kbibtex). Sé que puedo usar iconv para convertir la codificación de archivos completos, pero me gustaría saber si hay una manera de arreglar mi archivo sin corromper algunas de las entradas.

+4

Proporcione más detalles, consulte [Preguntas sobre la conversión de un archivo de codificación mixta a UTF8 en Perl] (http://stackoverflow.com/questions/6897982/questions-about-converting-a-mixed-encoding-file- to-utf8-in-perl) para una comparación de qué información es útil. – daxim

+0

Debe comenzar por dividir el archivo en los documentos HTML individuales. Luego puede verificar cada documento para una lista de materiales y un conjunto de caracteres en el elemento HEAD. – ikegami

Respuesta

3

Si se puede suponer codificación uniforme para cada línea y usted sabe que la codificación alternativo:

#!/usr/bin/perl 
use Encode; 
while(<>) { 
     my $line; 
     eval { 
     $line=Encode::decode_utf8($_); 
     } 
     if ([email protected]) $line=Encode::decode('iso-8859-1', $_); #not UTF-8 
     # Now $line is UNICODE.Do something to it 

} 

Todavía se puede hacer lo mismo con palabras si las líneas son la codificación mixta, pero aún se sabe cuál es la alternativa codificación Si no conoce la codificación alternativa, o si tiene más de una, necesita usar alguna biblioteca de adivinación de codificación, que bien podría adivinar.

+2

Es entre UTF-8 e iso-8859-1, use la herramienta 'fix_latin' que viene con [Encoding :: FixLatin] (http://search.cpan.org/perldoc?Encoding::FixLatin) en su lugar del código de Alien Life Form. – ikegami

3

Utilizo vim para esto, pero supongo que se puede hacer en cualquier editor.

  • Seleccione (shift + v) un bloque de texto en el que desee cambiar la codificación.

  • Tipo: enca -L lang - (reemplace 'lang' con su lengua, utilizo 'enca -L cs' utilidad enca entonces usted debe decirle a la codificación más probable del bloque seleccionado.)

  • !

    pulse u (para que deshacer la respuesta de enca que apareció en su texto)

  • seleccionar el bloque de nuevo, esta vez corriendo: iconv -f -t determined_encoding UTF-8

Tenga en cuenta que vim expande automáticamente presionado: a: \ <,> cuando está en modo visual, que es exactamente lo que quiere para ejecutar programas en bloques de texto.

Cuestiones relacionadas