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 que no son ASCII con algún marcador de posición, como '_'. Si conozco el idioma en el que está escrito el archivo, hay posibilidades adicionales, como la romanización.
¿Qué herramienta de Unix o biblioteca de lenguaje de programación disponible en Unix me puede dar una conversión decente (el mejor esfuerzo) de UTF-8 a ASCII?
La mayor parte del texto está en idiomas europeos basados en el tipo latino.
fuente

iconvytr, hay Unidecode . No estoy familiarizado con él, pero podría hacer lo que quiera, si puede usar Python.Respuestas:
Hará la conversión de mejor esfuerzo, dependiendo de las tablas de conversión. Si conoce aproximadamente el idioma de entrada, hay filtros específicos de idioma que ofrecen mejores resultados, por ejemplo
es la conversión del esperanto en la representación x-metodo,
intentará hacer una representación TeX de diacríticos, hay parámetros específicos del idioma:
transliterará "ä" en "ae" (habitual para el alemán) en lugar de "a"
utilizará las reglas polacas para transcribir el ruso, en lugar de las "inglesas", etc.
fuente
konwertsitio web? ¿Está empaquetado en alguna parte? github.com/taw/konwert/tree/master/konwert-1.8Esto funcionará para algunas cosas:
echo ĥéĺłœ π | iconv -f utf-8 -t ascii//TRANSLITvuelvehelloe ?. Cualquier carácter queiconvno sepa cómo convertir será reemplazado por signos de interrogación.iconves POSIX, pero no sé si todos los sistemas tienen laTRANSLITopción. A mí me funciona en Linux. Además, laIGNOREopción descartará silenciosamente los caracteres que no se pueden representar en el conjunto de caracteres de destino (verman iconv_open).Una opción inferior pero compatible con POSIX es usar
tr. Este comando reemplaza todos los puntos de código que no son ASCII con un signo de interrogación. Lee el texto UTF-8 un byte a la vez. "É" podría reemplazarse conE?o?, dependiendo de si se codificó utilizando un acento combinado o un carácter precompuesto.Ese ejemplo regresa
caf? ?????, usando caracteres precompuestos.fuente
trno está destinado a trabajar un byte a la vez. GNU tr lo hace, pero es un error.iconv -f utf-8 -t ascii//TRANSLITfuncionó bien para mí Cambió las comillas rizadas por comillas rectas. Gracias.//TRANSLITtambién funciona para otros conjuntos de caracteres, por ejemploiso-8859-1//TRANSLIT.iconvdaiconv: illegal input sequence at position 1234y trunca el archivo por mí. Sería bueno si simplemente eliminara el personaje e intentara retomar la secuencia nuevamente.tratar
uni2ascii -B input.txt >output.txtuni2ascii
fuente
¿Quiere decir que desea poder convertir los siguientes nombres en una cadena ASCII a la que la persona interesada no se opondría?
Sospecho que no hay una herramienta automatizada que pueda hacer esto. No puede haber ninguna o muchas latinizaciones de nombres personales. El software no puede elegir la versión culturalmente aceptable. Al menos no sin que el software sepa mucho sobre la cultura de la persona involucrada.
Ver también /programming//a/1398403/477035
fuente
perl -e 'use utf8; use Text::Unidecode; print unidecode("عبد الله الثاني بسين")'produce `` bd llh lthny bn lHsyn` que es una transcripción lo suficientemente buena para mis propósitos.Terminé usando Perl con Text :: Unidecode para esto. Ejemplo:
produce
bd llh lthny bn lHsyn, que es un resultado aceptable para mis propósitos.fuente