Codificació de caràcters

La codificació de caràcters és el mètode que permet convertir un caràcter d'un llenguatge natural (alfabet o sil·labari) en un símbol d'un altre sistema de representació, com un nombre o una seqüència de polsos elèctrics en un sistema electrònic, aplicant normes o regles de codificació.[a]

Normes de codificació

[modifica]

Defineixen la forma en què es codifica un caràcter donat en un símbol en un altre sistema de representació. Exemples d'això són el codi Morse, el codi BCD (6-bit), la norma ASCII o la norma UTF-8, entre altres.

ASCII

[modifica]

Per estar íntimament lligat a l'octet (i per tant als nombres enters que van del 0 al 127), el problema que presenta és que no pot codificar més de 128 símbols diferents (128 és el nombre total de diferents configuracions que es poden aconseguir amb 7 dígits binaris o digitals (0.000.000 , 0.000.001,..., 1.111.111 ), usant el vuitè dígit de cada octet (bit o dígit de paritat) per detectar algun error de transmissió. Una quota de 128 és suficient per incloure majúscules i minúscules de l'alfabet anglès, a més de xifres, puntuació, i alguns "caràcters de control" (per exemple, un que indica a una impressora que passi al full següent), però l'ASCII no inclou ni els caràcters accentuats ni el punt volat que es fa servir en català, ni tants altres símbols (signes matemàtics, lletres gregues, lletres llatines amb altres diacrítics, etc.) que són necessaris en molts contextos.

ASCII estès

[modifica]

A causa de les limitacions de l'ASCII es van definir diversos codis de caràcters de 8 bits, entre ells l'ASCII estès. Tanmateix, el problema d'aquests codis de 8 bits és que cada un d'ells es defineix per un conjunt de llengües amb escriptures semblants i per tant no donen una solució unificada a la codificació de totes les llengües del món. És a dir, no són suficients 8 bits per codificar tots els alfabets i escriptures del món.

Unicode

[modifica]

Com a solució a aquests problemes, des de 1991 s'ha acordat internacionalment utilitzar la norma Unicode, que és una gran taula, que actualment assigna un codi a cada un dels més de cinquanta mil símbols que conté, els quals abasten tots els alfabets europeus, ideogrames xinesos, japonesos, coreans, moltes altres formes d'escriptura, i més d'un miler de símbols especials.

UTF-8

[modifica]

És una norma de transmissió utilitzada juntament amb la norma de codificació Unicode.[1] Utilitzades en conjunt, funcionen de la següent manera:

  • Unicode assigna els enters del 0 al 127 (un total de 128) a exactament els mateixos caràcters que ASCII
  • UTF-8 empaqueta qualsevol enter del 0 al 127 en un octet "a l'antiga" però amb el vuitè dígit sempre a zero, ja que actualment el bit de paritat ja no es fa servir per a detecció d'errors
  • Atès que la taula d'Unicode és tan gran, la majoria dels seus símbols estan assignats a enters majors que 127 (codis que, en conseqüència, necessiten més de set dígits per a la seva representació binària). En tots aquests casos, UTF-8 envia al començament de la representació binària del codi en qüestió en un primer octet amb dígit de paritat = 1
  • El receptor d'aquest missatge, interpreta aquest dígit en 1 com a senyal que el que està sent transmès és un codi que no cap en 7 dígits binaris, i per tant determina que el símbol complet no es podrà conèixer fins que no es llegeixi el següent octet (o fins i tot el tercer octet que segueix, si la codificació requerís tres octets). En el pitjor dels casos, potser arribi a ser necessari llegir sis octets consecutius per determinar un símbol codificat amb un número prou alt.

Mapes de caràcters

[modifica]

Sovint els sistemes operatius, en especial Windows, utilitzen mapes de caràcters o pàgines de codi on barregen diverses normes aquí es troba a la figura 1 un exemple de com estan distribuïts els caràcters i les normes de codificació de caràcters per a MS DOS.

Normes de Transmissió

[modifica]

Les normes de transmissió tenen com a objectiu definir la manera com els caràcters codificats (utilitzant les normes de codificació) es transmeten al canal de comunicacions (per exemple Internet)

Actualment, a Internet els missatges es transmeten en paquets que sempre consten d'un nombre enter d'octets, i la detecció d'errors ja no es fa amb el vuitè dígit de cada octet, sinó amb octets especials que automàticament s'agreguen a cada paquet. Les normes de transmissió es limiten a especificar una correspondència, reversible, entre codis (que representen caràcters), i seqüències d'octets (que han de ser transmesos en qualitat de dades).

Taules tipogràfiques

[modifica]

Però, finalment, per al correu electrònic en xinès simplificat (per exemple) cal un detall important:

La taula que el Consorci Unicode publica per a ser llegida per humans, conté una representació gràfica o descripció, de cada caràcter inclòs fins aquell moment, però, els sistemes de visualització de documents, per poder funcionar, requereixen taules de tipografia, que associen un glif (dibuix) a cada caràcter que abasten, i passa que hi ha moltíssimes taules de tipografia, amb noms com Arial o Times, que dibuixen una mateixa lletra a base de matrius diferents i en diferents estils ("A" o "A"), però la gran majoria de les famílies de tipus d'impremta contenen només un petit subconjunt de tots els caràcters Unicode. Per aquest motiu, per llegir pàgines amb caràcters asiàtics, per exemple, no n'hi ha prou que el visualitzador usat "accepti" la codificació Unicode, sinó que, a més, l'ordinador ha de tenir instal·lada una taula tipogràfica prou extensa.

Normes comunes de codificació de caràcters

[modifica]

Codificació de caràcters del català[b]

[modifica]
Minúscules
caràcter ISO-8859-1 UTF-8 UTF-16
a 0x61 0x61 0x00 0x61
b 0x62 0x62 0x00 0x62
c 0x63 0x63 0x00 0x63
d 0x64 0x64 0x00 0x64
e 0x65 0x65 0x00 0x65
f 0x66 0x66 0x00 0x66
g 0x67 0x67 0x00 0x67
h 0x68 0x68 0x00 0x68
i 0x69 0x69 0x00 0x69
j 0x6a 0x6a 0x00 0x6a
k 0x6b 0x6b 0x00 0x6b
l 0x6c 0x6c 0x00 0x6c
m 0x6d 0x6d 0x00 0x6d
n 0x6e 0x6e 0x00 0x6e
o 0x6f 0x6f 0x00 0x6f
p 0x70 0x70 0x00 0x70
q 0x71 0x71 0x00 0x71
r 0x72 0x72 0x00 0x72
s 0x73 0x73 0x00 0x73
t 0x74 0x74 0x00 0x74
u 0x75 0x75 0x00 0x75
v 0x76 0x76 0x00 0x76
w 0x77 0x77 0x00 0x77
x 0x78 0x78 0x00 0x78
y 0x79 0x79 0x00 0x79
z 0x7a 0x7a 0x00 0x7a
Majúscules
caràcter ISO-8859-1 UTF-8 UTF-16
A 0x41 0x41 0x00 0x41
B 0x42 0x42 0x00 0x42
C 0x43 0x43 0x00 0x43
D 0x44 0x44 0x00 0x44
E 0x45 0x45 0x00 0x45
F 0x46 0x46 0x00 0x46
G 0x47 0x47 0x00 0x47
H 0x48 0x48 0x00 0x48
I 0x49 0x49 0x00 0x49
J 0x4a 0x4a 0x00 0x4a
K 0x4b 0x4b 0x00 0x4b
L 0x4c 0x4c 0x00 0x4c
M 0x4d 0x4d 0x00 0x4d
N 0x4e 0x4e 0x00 0x4e
O 0x4f 0x4f 0x00 0x4f
P 0x50 0x50 0x00 0x50
Q 0x51 0x51 0x00 0x51
R 0x52 0x52 0x00 0x52
S 0x53 0x53 0x00 0x53
T 0x54 0x54 0x00 0x54
U 0x55 0x55 0x00 0x55
V 0x56 0x56 0x00 0x56
W 0x57 0x57 0x00 0x57
X 0x58 0x58 0x00 0x58
Y 0x59 0x59 0x00 0x59
Z 0x5a 0x5a 0x00 0x5a
Accents i diacrítics
caràcter ISO-8859-1 UTF-8 UTF-16
à 0xe1 0xc3 0xa1 0x00 0xe1
À 0xc1 0xc3 0x81 0x00 0xc1
è 0xe8 0xc3 0x88 0x00 0xe8
È 0xc8 0xc3 0x88 0x00 0xc8
é 0xe9 0xc3 0xa9 0x00 0xe9
É 0xc9 0xc3 0x89 0x00 0xc9
í 0xed 0xc3 0xad 0x00 0xed
Í 0xcd 0xc3 0x8d 0x00 0xcd
ï 0xee 0xc3 0x8e 0x00 0xee
Ï 0xce 0xc3 0x8e 0x00 0xce
ò 0xf2 0xc3 0xb2 0x00 0xf2
Ò 0xd2 0xc3 0x92 0x00 0xd2
ó 0xf3 0xc3 0xb3 0x00 0xf3
Ó 0xd3 0xc3 0x93 0x00 0xd3
Ú 0xfa 0xc3 0xba 0x00 0xfa
Ú 0xda 0xc3 0x9a 0x00 0xda
Ü 0xfc 0xc3 0xbc 0x00 0xfc
Ü 0xdc 0xc3 0x9c 0x00 0xdc
ç 0xe7 0xc3 0x87 0x00 0xe7
Ç 0xc7 0xc3 0x87 0x00 0xc7
ñ 0xf1 0xc3 0xb1 0x00 0xf1
Ñ 0xd1 0xc3 0x91 0x00 0xd1
· 0xb7 0xc2 0xb7 0x00 0xb7
Símbols
caràcter ISO-8859-1 UTF-8 UTF-16
¿ 0xbf 0xc2 0xbf 0x00 0xbf
? 0x3f 0x3f 0x00 0x3f
¡ 0xa1 0xc2 0xa1 0x00 0xa1
! 0x21 0x21 0x00 0x21

Vegeu també

[modifica]

Notes

[modifica]
  1. Un exemple senzill de codificació per a la paraula " hello " pot veure's aquí
  2. En aquesta taula els codis donats estan donat sota el sistema numèric hexadecimal, per veure la representació dels codis ASCII en sistemes numèrics com ara: decimal, binari i conèixer el codi ALT de teclat per als mateixos i fins i tot el nom correcte per a cada caràcter, pot utilitzar l'applet que apareix aquí.

Referències

[modifica]
  1. Lockhart, Josh. Modern PHP: New Features and Good Practices (en anglès). O'Reilly Media, 2015, p. 105. ISBN 1491905182. 

Bibliografia

[modifica]