¿Qué es eso de ASCII, ISO-8859-1 y UTF-8?

Los tres estándares representan el esfuerzo informático por brindar un sistema de codificación que permita representar los caracteres que se usan en todos los idiomas. El primer esfuerzo lo hizo ASCII y fue para el idioma inglés (128 caracteres), luego ante su insuficiencia para representar otros caracteres como los latinos por ejemplo, nace ISO-8859-1 (tambien llamado LATIN-1 ó ASCII extendido) pero debido a que no podía representar caracteres de otros idiomas aparece el estándar UNICODE (del cual es parte UTF-8).

Para convertir entre un formato u otro podemos usar

recode ISO-8859-1..UTF-8 view.txt
recode UTF-8..ISO-8859-1 view.txt
recode ISO-8859-1..UTF-16 view.txt
recode UTF-16..HTML view.txt

donde view.txt es el nombre del archivo que queremos convertir.

Un buen detalle a saber es que mientras ISO-8859-1 usa un byte para representar un caracter, no pasa lo mismo con UTF-8 que puede usar hasta 4 bytes ya que es de longitud variable. Esto hace que una base de datos en UTF-8 sea un "poquito" mas pesada que una en ISO-8859-1. Esto sucede porque -por ejemplo- mientras ISO-8859-1 usa un byte para representar la letra ñ, UTF-8 usa dos bytes. Esto podríamos comprobarlo generando un documento con puras eñes en formato ISO-8859-1 y luego convirtiendolo a formato UTF-8, comprobarán que pesa... el doble!!!

Hay un tema más y es que muchas veces cuando vamos a migrar información nos encontramos con caracteres ISO-8859-1 (los correspondientes a los números 147, 148, 149, 150, 151 y 133) que no pueden verse en un editor UNIX pero si en un browser HTML. En ese caso si queremos reemplazar los caracteres podemos usar la siguiente instrucción.

str_replace(array(chr(147), chr(148), chr(149), chr(150), chr(151), chr(133), '"', '•'), array(chr(34),  chr(34),  chr(45),  chr(45),  chr(45),  '...', chr(34), chr(45)), $field);

donde 34, 45 son los equivalentes. Para más información se puede ver una tabla como

http://www.petefreitag.com/cheatsheets/ascii-codes/

y para mayor información se pueden ver los siguientes enlaces

http://www.fileformat.info/info/unicode/
http://techtastico.com/post/tipos-de-codificacion-de-caracteres/

http://www.cl.cam.ac.uk/~mgk25/unicode.html

Adicionalmente si queremos reconocer el formato de un archivo podemos seguir las instrucciones del siguiente enlace:

http://www.linux.com/archive/feature/141378

ó usar el siguiente comando

file --mime-encoding view.txt