character-encoding – Conversión de un archivo UTF-8 a ASCII (mejor esfuerzo)

Pregunta:

Tengo un archivo en UTF-8 que contiene textos en varios idiomas. Muchos de ellos son nombres de personas. Necesito convertirlo a ASCII y necesito que el resultado se vea lo más decente posible.

Hay muchas formas de abordar la conversión de una codificación más amplia a una más estrecha. La transformación más simple sería reemplazar todos los caracteres no ASCII con algún marcador de posición, como '_'. Si conozco el idioma en el que está escrito el archivo, existen posibilidades adicionales, como la romanización.

¿Qué herramienta de Unix o biblioteca de lenguaje de programación disponible en Unix puede darme una conversión decente (mejor esfuerzo) de UTF-8 a ASCII?

La mayor parte del texto está en idiomas europeos basados ​​en caracteres latinos.

Respuesta:

Esto funcionará para algunas cosas:

iconv -f utf-8 -t ascii//TRANSLIT

echo ĥéĺłœ π | iconv -f utf-8 -t ascii//TRANSLIT devuelve helloe ? . Cualquier carácter que iconv no sepa cómo convertir será reemplazado por signos de interrogación.

iconv es POSIX, pero no sé si todos los sistemas tienen la opción TRANSLIT . Me funciona en Linux. Además, el IGNORE opción personajes silencio de descarte que no se pueden representar en el conjunto de caracteres de destino (véase man iconv_open ).

Una opción inferior pero compatible con POSIX es usar tr . Este comando reemplaza todos los puntos de código no ASCII con un signo de interrogación. Lee texto UTF-8 byte a byte. "É" podría ser reemplazado por E? o ? , dependiendo de si se codificó con un acento combinado o un carácter precompuesto.

echo café äëïöü | tr -d '\200-\277' | tr '\300-\377' '[?*]'

Ese ejemplo devuelve caf? ????? , utilizando caracteres precompuestos.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım