CON · Concepto 6 · Presentación (Aplicación)

31.Codificación de datos

Cómo se representan textos y datos como bytes para que dos sistemas los entiendan igual: ASCII, UTF-8, Base64, JSON y otros formatos.

¿Qué es?

La codificación de datos es el acuerdo sobre cómo se convierten la información en bytes y de regreso: qué número representa la letra «ñ», cómo se escribe una fecha o cómo se envía una imagen dentro de un correo.

Es como ponerse de acuerdo en el idioma antes de escribir una carta. Si tú escribes en español y el otro lee como si fuera inglés, las letras llegan, pero el mensaje no se entiende.

En términos técnicos

  • Es tarea de la capa 6 (Presentación) del modelo OSI: traducir los datos a un formato común para que ambos extremos los interpreten igual. En TCP/IP la hace la aplicación.
  • Para el texto: ASCII, la familia ISO-8859 (Latin-1) y, sobre todo, Unicode con UTF-8.
  • Para enviar binarios como texto: Base64.
  • Para datos estructurados: JSON, XML, Protocol Buffers, ASN.1.
  • Para el orden de los bytes en los encabezados de red: big-endian, llamado orden de red.

¿Dónde lo vas a encontrar?

En la cabecera Content-Type: text/html; charset=utf-8 de una página, en los adjuntos de un correo, en las APIs que responden en JSON, en los certificados digitales (ASN.1) y cada vez que un archivo de texto muestra caracteres extraños.

¿Cómo funciona?

Del ASCII a UTF-8

Codificación Bytes por carácter Qué cubre
ASCII 1 (usa 7 bits) 128 caracteres: inglés, números y signos; no tiene «ñ» ni acentos
ISO-8859-1 (Latin-1) / Windows-1252 1 Agrega acentos y «ñ» para idiomas de Europa occidental
UTF-8 De 1 a 4 Todos los caracteres de Unicode; compatible con ASCII
UTF-16 2 o 4 Todos los de Unicode; lo usan internamente Windows y Java

Ejemplos en UTF-8:

Carácter Bytes (hexadecimal)
A 41 (igual que en ASCII)
ñ C3 B1
€ E2 82 AC
😀 F0 9F 98 80

Por qué aparecen caracteres raros

Si un texto se guardó en UTF-8 y se lee como Latin-1, cada byte se interpreta por separado: «año» se ve como «año». Si es al revés, la «ñ» (F1 en Latin-1) no es UTF-8 válido y aparece como «a�o». Los bytes no cambiaron; cambió cómo se leyeron.

Base64: binarios como texto

Algunos protocolos antiguos (como el correo) solo aceptan texto. Base64 convierte cada 3 bytes en 4 caracteres de un alfabeto seguro (A–Z, a–z, 0–9, + y /). El resultado ocupa alrededor de 33 % más.

Original Base64
Hola SG9sYQ==
Año (UTF-8) QcOxbw==

Los = al final son relleno.

Datos estructurados

Formato Cómo es Uso típico
JSON Texto legible: {"nombre": "Ana", "edad": 16} APIs web
XML Texto con etiquetas Documentos, SOAP, configuraciones
Protocol Buffers Binario compacto, con esquema gRPC, microservicios
ASN.1 (BER/DER) Binario, con esquema SNMP, certificados X.509, LDAP

Verificación y diagnóstico

Comando Qué debes ver
file -i archivo.txt (Linux) El tipo y la codificación: charset=utf-8 o charset=iso-8859-1
iconv -f latin1 -t utf-8 viejo.txt > nuevo.txt (Linux) Convierte un archivo de Latin-1 a UTF-8
xxd archivo.txt | head (Linux) Los bytes reales en hexadecimal
echo -n "Hola" | base64 y echo "SG9sYQ==" | base64 -d Codificar y decodificar Base64
curl -sI https://solutionss.net | grep -i content-type El charset que anuncia el servidor

Para tomar en cuenta

  • Usa UTF-8 en todo: archivos, base de datos (en MySQL, utf8mb4), páginas web y programas.
  • Declara la codificación: <meta charset="utf-8"> en HTML y charset=utf-8 en las cabeceras.
  • «utf8» en MySQL antiguo no es UTF-8 completo: solo guarda hasta 3 bytes y falla con emojis. Usa utf8mb4.
  • Un mismo carácter puede escribirse de dos formas en Unicode («é» como un carácter o como «e» + acento). Para comparar textos, normalízalos.
  • Fin de línea: Windows usa CR LF (\r\n) y Linux LF (\n). Muchos protocolos de texto (HTTP, SMTP) exigen CR LF.
  • Codificar no es cifrar ni comprimir: son tres cosas distintas que la capa de presentación puede aplicar.

Material descargable

Aún no hay material descargable para este tema. Pronto habrá cuadernillos, manuales o laboratorios.

Referencias (RFC / estándar)

Antes conviene ver…

© solutions_ · Redes informáticas · 31 Codificación de datos