Quoted-printable, o codificación QP, es una codificación que usa caracteres imprimibles (alfanuméricos y el signo de igualdad, =
) para transmitir datos de 8 bits sobre un protocolo que solamente soporta 7 bits. Está definido como un content transfer encoding de MIME para ser usado en mensajes de correo electrónico de Internet.
Introducción
El protocolo básico de transmisión de mensajes en Internet, SMTP, solamente soporta caracteres ASCII (Véase también 8BITMIME). MIME define mecanismos para enviar otros tipos de información en un mensaje de correo electrónico, incluyendo texto en idiomas distintos del inglés, que emplea codificaciones de caracteres diferentes a ASCII. Sin embargo, estas codificaciones frecuentemente usan valores de bytes fuera del rango de ASCII, por lo que necesitan ser codificados antes de que puedan ser utilizados en un mensaje. La codificación Quoted-printable es uno de los métodos usados para mapear (asignar) una secuencia arbitraria de bytes en caracteres ASCII. Esta codificación es reversible, lo que significa que los bytes originales y por tanto los caracteres no ASCII pueden ser recuperados.
Quoted-printable y Base64 son las dos codificaciones básicas de MIME. Si el texto de entrada es mayoritariamente ASCII, el resultado de la codificación con quoted-printable es bastante legible y compacto. Por otra parte, si la entrada consta mayormente de caracteres no ASCII entonces el resultado se vuelve más ininteligible y extremadamente ineficiente. La codificación Base64, a diferencia de Quoted-printable, no es legible pero tiene una sobrecarga de ejecución predecible para cualesquiera que sean los datos y es la opción más recomendada para datos en formatos binario o texto en idiomas no basados en el alfabeto latino.
Codificación Quoted-printable
Cualquier octeto puede ser codificado con tres caracteres: Un signo "=" seguido por dos dígitos hexadecimales (0–9 o A–F) son suficientes para representar el valor numérico del octeto (byte). Por ejemplo, un carácter ASCII form feed (cuyo valor decimal es 12) puede ser representado por "=0C", y un signo de igualdad ASCII (cuyo valor decimal es 61) es representado por "=3D". Todos los caracteres con la excepción de los caracteres ASCII imprimibles o el fin de línea deben ser codificados de una manera similar.
Todos los caracteres ASCII imprimibles, o sea los que tienen valores decimales entre 33 y 126, pueden ser representados por sí mismos, excepto =
(de valor decimal 61).
Los caracteres ASCII tabulación y espacio (con valores decimales 9 y 32 respectivamente), pueden representarse por sí mismos excepto que aparezcan al final de la línea. Si esto ocurriera deben ser codificados como "=09", para tabulación o "=20" para espacio.
Si los datos que se están codificando contienen caracteres de retorno de línea y se quiere conservar este significado, deben ser codificados como una secuencia ASCII CR LF, no como sus valores de byte originales. Por el contrario si los bytes con valor 10 y 13 tienen significados diferentes a un retorno de línea deben ser codificados como =0A y =0D respectivamente.
Las líneas de datos codificados con quoted-printable no pueden tener más de 76 caracteres como longitud. Para satisfacer este requerimiento sin alterar el texto codificado, se pueden agregar cambios de línea suaves según sea necesario. Un cambio de línea suave consiste en un "=" al final de la línea codificada, y no causa un cambio de línea en el texto decodificado.
Un ejemplo programático
Debido a lo extendido del uso de esta codificación en Internet, tanto en correo electrónico como en el protocolo HTTP, muchas bibliotecas estándares de muchos lenguajes incluyen soporte para codificar y decodificar Quoted-printable. A continuación se muestra un ejemplo escrito en Python
>>> import quopri
>>> texto = "Prueba de codificación QP!"
>>> textoCodificado = quopri.encodestring(texto)
>>> textoCodificado
'Prueba de codificaci=C3=B3n QP!'
>>> quopri.decodestring(textoCodificado)
'Prueba de codificación QP!'
Enlaces externos
- Codificador de quoted-printable en línea
- Decodificador de quoted-printable en línea
- Codificador y Decodificador de quoted-printable en línea