Què és una codificació de caràcters
Una codificació és un acord: «el número 65 significa la lletra A». Quan escrius un text, el programa desa aquests números; quan una altra persona l'obre, el seu programa els torna a traduir a lletres fent servir el mateix acord. Si tots dos no fan servir la mateixa taula, el text surt malament.
Cal separar dues idees. Una és el joc de caràcters, la llista de quins números corresponen a quins símbols. L'altra és com aquests números es desen en bytes. En ASCII les dues coincideixen de manera trivial; en Unicode no, i aquí entra UTF-8.
ASCII: 128 caràcters de 7 bits
ASCII (sigles d'American Standard Code for Information Interchange) es va estandarditzar a la dècada de 1960. Fa servir 7 bits, o sigui 2 elevat a 7 = 128 codis, del 0 al 127. D'ells, 33 són caràcters de control (del 0 al 31 i el 127) i 95 són imprimibles (del 32 al 126, inclòs l'espai).
No inclou lletres amb accent, ni la ñ, ni el símbol de l'euro: es va dissenyar per a l'anglès. Això explica per què després van fer falta altres taules.
| Caràcter de control | Decimal | Hexadecimal | Binari (7 bits) | Per a què serveix |
|---|---|---|---|---|
| Nul (NUL) | 0 | 00 | 0000000 | Marca el final d'una cadena en diversos llenguatges |
| Tabulació horitzontal (TAB) | 9 | 09 | 0001001 | Salta al tabulador següent |
| Salt de línia (LF) | 10 | 0A | 0001010 | Baixa a la línia següent |
| Retorn de carro (CR) | 13 | 0D | 0001101 | Torna al començament de la línia |
| Escapada (ESC) | 27 | 1B | 0011011 | Inicia seqüències de control |
| Espai | 32 | 20 | 0100000 | Primer caràcter imprimible |
| Suprimeix (DEL) | 127 | 7F | 1111111 | Esborra el caràcter |
Relacions que convé recordar
La taula no està ordenada a l'atzar. Amb unes quantes regularitats pots llegir codis de memòria.
- Els dígits del «0» al «9» ocupen del 48 al 57 (30 a 39 en hexadecimal). El valor d'un dígit és el seu codi menys 48: el «7» és 55, i 55 − 48 = 7.
- Les majúscules van del 65 («A») al 90 («Z») i les minúscules del 97 («a») al 122 («z»).
- La diferència entre una majúscula i la seva minúscula és sempre 32: «A» = 65 i «a» = 97; «C» = 67 i «c» = 99. En binari només canvia un bit: 01000001 per a «A» i 01100001 per a «a».
- Per saber quin lloc de l'abecedari ocupa una majúscula, resta 64: «C» és 67 i 67 − 64 = 3, la tercera lletra.
- Com que totes les majúscules (65 a 90) tenen codis menors que les minúscules (97 a 122), un ordre alfabètic «per codi» posa «Zebra» abans d'«apple». Molts programes necessiten una opció de comparació apart per ordenar bé.
Final de línia: LF, CR i CRLF
Un salt de línia sembla una cosa simple, però s'escriu diferent segons el sistema. Unix, Linux i macOS fan servir un sol caràcter, LF (10). Windows en fa servir dos seguits, CR i LF (13 i 10), coneguts com a CRLF. Els vells teletips necessitaven dues ordres diferents: tornar el carro al començament i avançar el paper una línia.
Aquesta diferència és la causa d'arxius que es veuen tots en una línia en un editor bàsic, o amb un símbol estrany al final de cada renglera. Si busques quin codi té cada un, escriu LF o CR al cercador de la taula ASCII.
L'«ASCII estès» no és un estàndard
Com que un byte té 8 bits i ASCII només en fa servir 7, sobraven 128 codis lliures (del 128 al 255) i cada fabricant i regió els va omplir a la seva manera. Això es coneix com a «ASCII estès», però no existeix una única taula: n'hi ha moltes, anomenades pàgines de codis. Dues de les més conegudes són Latin-1 (ISO-8859-1), on la é és el codi 233, i Windows-1252, semblant però amb diferències en els codis 128 a 159 (allà hi ha, per exemple, l'euro).
El problema és que el codi 233 significa «é» en una taula i una altra cosa en una altra. Un text escrit amb una taula i llegit amb una altra mostrava brossa. Unicode va néixer per acabar amb aquest desordre.
Unicode i UTF-8
Unicode assigna un número únic, anomenat punt de codi, a cada caràcter de gairebé tots els sistemes d'escriptura del món, més símbols i emojis. Avui té més de 150.000 caràcters. S'escriu amb el prefix U+ i en hexadecimal: la «A» és U+0041, la «ñ» és U+00F1, l'euro és U+20AC i l'emoji de cara somrient és U+1F600. Els primers 128 punts de codi són exactament els d'ASCII.
UTF-8 és la forma més utilitzada de desar aquests números en bytes, i en fa servir entre 1 i 4 segons el caràcter. Els 128 d'ASCII ocupen un sol byte idèntic al de sempre, així que un text ASCII és també un text UTF-8 vàlid. La resta ocupa més bytes.
| Caràcter | Punt de codi | Bytes en UTF-8 | Bytes (hexadecimal) |
|---|---|---|---|
| A | U+0041 | 1 | 41 |
| é | U+00E9 | 2 | C3 A9 |
| ñ | U+00F1 | 2 | C3 B1 |
| € | U+20AC | 3 | E2 82 AC |
| 😀 | U+1F600 | 4 | F0 9F 98 80 |
Per què apareix «Ã±» en lloc de «ñ»
És l'error més comú i té una explicació exacta. La ñ en UTF-8 són dos bytes: C3 i B1. Si un programa creu que el text està en Latin-1, llegeix cada byte com un caràcter: el C3 és «Ã» i el B1 és «±». Resultat: «Ã±». Passa el mateix amb «é», que es veu com «Ã©», i amb «canción», que apareix com «canción».
La solució gairebé sempre és indicar al programa que obri l'arxiu com a UTF-8 (en un editor de text o a la configuració de la importació d'un full de càlcul). Quan passa al revés, text en Latin-1 llegit com a UTF-8, solen aparèixer rombes amb un signe d'interrogació, perquè aquests bytes solts no formen seqüències UTF-8 vàlides.
Com fer servir la taula ASCII i el convertidor
L'eina «Taula ASCII» mostra els 128 caràcters amb el seu codi en decimal, hexadecimal, octal i binari, i el nom dels de control.
- Escriu al cercador un caràcter, un codi o el nom d'un de control (per exemple A, 65, 41 o LF) per trobar-ne la fila.
- Fes servir els botons de filtre (Control, Xifres, Majúscules, Minúscules, Signes) per veure només un grup.
- Per convertir, escriu un text a «Text» i tria el format (decimal, hexadecimal, octal o binari): a sota apareixen els codis. «Hola» dona 72 111 108 97 en decimal i 48 6F 6C 61 en hexadecimal.
- També ho pots fer al revés: enganxa codis separats per espais o comes a «Codis» i es forma el text. En hexadecimal s'accepten prefixos com 0x41.
Si el text té caràcters que no són ASCII, com la ñ, l'eina ho avisa i mostra el seu codi Unicode. Per veure els bytes reals en UTF-8 fes servir «Text a binari»: la ñ dona 11000011 10110001, dos bytes de 8 bits. Els límits: la taula mostra només ASCII estàndard, no l'estès, i tot es calcula al teu navegador sense enviar el text a cap servidor.
Preguntes freqüents
Quants caràcters té l'ASCII?
128, amb codis del 0 al 127 i 7 bits cada un. D'ells, 33 són de control i 95 són imprimibles, comptant l'espai.
Quin és el codi ASCII de la lletra A i de la a?
La «A» és 65 (41 en hexadecimal, 01000001 en binari) i la «a» és 97 (61 en hexadecimal, 01100001 en binari). Sempre difereixen en 32.
Quina és la diferència entre ASCII i Unicode?
ASCII té 128 caràcters pensats per a l'anglès. Unicode en té més de 150.000, de gairebé tots els idiomes i emojis, i els seus primers 128 són els mateixos que els d'ASCII.
Què és UTF-8?
És la forma més utilitzada de desar text Unicode en bytes. Fa servir d'1 a 4 bytes per caràcter: els d'ASCII en ocupen un, una ñ en ocupa dos i un emoji quatre.
Per què el meu text mostra «Ã±» o «Ã©»?
Perquè un text desat en UTF-8 s'està llegint com a Latin-1. Obre l'arxiu indicant la codificació UTF-8 i es soluciona.