====== Encodages : ASCII et Unicode ======
Les transistors, les circuits mémoires... stockent des entités binaires, des 0 et des 1. On a vu que l'on pouvait regrouper ses bits pour former des mots -- 1 octet est un mot de 8 bits.
**Comment va-t-on stocker des caractères ?**
===== Table ASCII =====
**A**merican **S**tandard **C**ode for **I**nformation **I**nterchange
128 caractères, pas de caractères accentués, beaucoup de caractères de contrôle liés à la technologie de l'époque -- années 60.
Certains sont spécialement important néanmoins :
* HT pour //Horizontal Tab//, c'est à dire une tabulation que l'on note généralement ''%%'\t'%%''.
* LF pour //Line Feed//, c'est à dire une fin de ligne que l'on note généralement ''%%'\n'%%''.
* CR pour //Carriage Return//, c'est à dire le retour charriot ce qui correspond à un retour à la ligne que l'on note généralement ''%%'\r'%%''.
* SP pour //SPace//, c'est à dire l'espace ''%%' '%%''.
Il peut y avoir, selon le système et le langage, des variations pour indiquer un retour à la ligne. Autrefois, c'était ''%%'\r\n'%%'' ce que l'on retrouve dans certains échanges internet. Parfois, ''%%'\n'%%'' suffit, comme en Python.
| ^ x0 ^ x1 ^ x2 ^ x3 ^ x4 ^ x5 ^ x6 ^ x7 ^ x8 ^ x9 ^ xA ^ xB ^ xC ^ xD ^ xE ^ xF ^
^ **0x** | NUL | SOH | STX | ETX | EOT | ENQ | ACK | BEL | BS | HT | LF | VT | FF | CR | SO | SI |
^ **1x** | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN | EM | SUB | ESC | FS | GS | RS | US |
^ **2x** | SP | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / |
^ **3x** | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
^ **4x** | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
^ **5x** | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | %%^%% | _ |
^ **6x** | %%`%% | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
^ **7x** | p | q | r | s | t | u | v | w | x | y | z | { | %%|%% | } | ~ | DEL |
===== Unicode =====
Codage international contenant environ 140 000 caractères pour tous les alphabets.
* Les 128 premiers correspondent à ASCII
* Les 256 premiers correspondent à ISO 8859-1 = Latin-1 -- lui-même compatible avec ASCII
Un caractère est Unicode codé sur 4 octets.
Le plus souvent, pour améliorer les performances, Unicode n'est pas utilisé directement. Pour les textes on utilise des adaptation, notamment **UTF-8**, permettant d'occuper moins de 4 octets par caractère. [[nsi:premiere:fichier_texte|On verra plus tard]].
==== Unicode et Python ====
En Python, on utilise directement Unicode ce qui permet d'écrire à peu près n'importe quel caractère.
>>> ord('c') # renvoie le code Unicode du caractère
99
>>> ord('и')
1080
>>> chr(99) # opération inverse : code -> caractère
'c'
>>> chr(1080)
'и'