Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédenteDernière révisionLes deux révisions suivantes |
info:gene:repdonnees [2022/10/05 18:05] – [5.4 UTF-8] phil | info:gene:repdonnees [2023/10/19 15:12] – [3. Encodage des entiers relatifs (complément à 2)] phil |
---|
| |
===== Représentation des données ===== | ===== Représentation des données ===== |
[Mise à jour le 3/10/2022] | [Mise à jour le 19/10/2023] |
| |
| |
**Sources** | **Sources** |
* Numérique et sciences informatiques 1<sup>er</sup> - ellipses | * Numérique et sciences informatiques 1<sup>er</sup> - ellipses |
| |
| **Ressources** |
| * Complément à 2 (<html><a href="https://fr.wikipedia.org/wiki/Compl%C3%A9ment_%C3%A0_deux" target="_blank">Wikipédia</a></html>) |
| * Editeur hexadécimal en ligne : <html><a href="https://hexed.it/" target="_blank">HexEdit</a></html> |
| |
==== 1. Introduction ==== | ==== 1. Introduction ==== |
| |
//Vérification// : pour n = 18, N<sub>10</sub> ∈ [-2<sup>17</sup>, 2<sup>17</sup>-1] soit **-131072 ≤ N<sub>10</sub> ≤ 131071** | //Vérification// : pour n = 18, N<sub>10</sub> ∈ [-2<sup>17</sup>, 2<sup>17</sup>-1] soit **-131072 ≤ N<sub>10</sub> ≤ 131071** |
| |
| |
| <callout type="primary" icon="true">**Méthode** |
| * Les nombres positifs sont représentés de manière usuelle. |
| * Les **nombres négatifs** sont obtenus en calculant l'opposé du nombre positif par deux opérations successives: |
| * On **inverse les bits de l'écriture binaire** (opération binaire NON), on fait ce qu'on appelle le complément à un ; |
| * On **ajoute 1** au résultat (**les dépassements sont ignorés**). \\ Cette opération correspond au calcul de **2<sup>n</sup> − |x|**, où n est la longueur de la représentation et |x| la valeur absolue du nombre à coder. \\ Ainsi, −1 s'écrit comme 256−1 = 255 = 11111111<sub>2</sub>, pour les nombres sur 8 bits. Ceci est à l'origine du nom de cette opération : « complément à 2 puissance n », quasi-systématiquement tronqué en « complément à 2 ». |
| |
| La même opération effectuée sur un nombre négatif donne le nombre positif de départ: 2n − (2n − x) = x. |
| </callout> |
| |
| |
| |
=== 5.1 ISO 8859 === | === 5.1 ISO 8859 === |
| * **Ressource** : <html><a href="https://fr.wikipedia.org/wiki/ISO/CEI_8859-1" target="_blank">ISO-8859-1</a></html> sur Wikipédia |
| |
A compléter | A compléter |
| |
<callout type="tip" icon="true">Chaque caractère a un code unique, appelé "//code point//" ou **point de code** et noté **U+XXXX** où chaque X est un caractère hexadécimal. En pratique la séquence de X est au minimum de 4 caractères.</callout> | <callout type="tip" icon="true">Chaque caractère a un code unique, appelé "//code point//" ou **point de code** et noté **U+XXXX** où chaque X est un caractère hexadécimal. En pratique la séquence de X est au minimum de 4 caractères.</callout> |
| |
Cette norme définit plusieurs techniques d'encodage pour représenter les points de code de manière plus ou moins économique selon la technique choisie. Ces encodages, appelés //formats de transformation universelle// ou //**U**niversal **T**ransformation **F**ormat// (**UTF**) en anglais, portent les noms **UTF-n**, où //n// indique le nombre minimal de //bits// pour représenter un point de code. | Cette norme définit plusieurs techniques d'encodage pour représenter les points de code de manière plus ou moins économique selon la technique choisie. Ces encodages, appelés //formats de transformation universelle// ou //**U**niversal **T**ransformation **F**ormat// (**UTF**) en anglais, portent les noms **UTF-n**, où //n// indique le nombre minimal de //bits// pour représenter un point de code. \\ \\ |
| |
{{ :info:gene:utf8.png?nolink&120|}} | {{ :info:gene:utf8.png?nolink&100|}} |
* **5.4 UTF-8** | == 5.3.1 UTF-8 == |
<html><a href="https://fr.wikipedia.org/wiki/UTF-8" target="_blank">UTF-8</a></html> (**U**niversal **T**ransformation **F**ormat) est un **code à taille variable** destiné à représenter les caractères Unicode avec au minimum **8 bits**. Les caractères sont représentés sur 1,2,3 ou 4 octets. UTF-8 est compatible avec le code ASCII : les codes UTF-8 d'un octet avec le bit de poids fort à zéro sont les caractères du code ASCII. Les caractères codés sur plus d'un octet ont tous le bit de poids fort à 1, de telle sorte qu'ils sont en général ignorés par les logiciels qui ne connaissent que le code ASCII. | <callout type="primary" icon="true"><html><a href="https://fr.wikipedia.org/wiki/UTF-8" target="_blank">UTF-8</a></html> (**U**niversal **T**ransformation **F**ormat) est un **code à taille variable** destiné à représenter les caractères Unicode avec au minimum **8 bits**. C'est le format le plus utilisé sous Linux, dans les protocoles réseaux et les sites Web.</callout> |
^ Nb Octets ^ Premier "code point" ^ Dernier "code point" ^ Octet 1 ^ Octet 2 ^ Octet 3 ^ Octet 4 ^ | |
| 1 | U+0000 | U+007F | 0xxxxxxx | | | | | Les caractères sont représentés sur **1,2,3 ou 4 octets**. UTF-8 est **compatible** avec le code **ASCII** : les codes UTF-8 d'un octet avec le bit de poids fort à zéro sont les caractères du code ASCII (ainsi les programmes qui fonctionnaient sur des textes encodés en ASCII devraient continuer à fonctionner si ces mêmes textes sont encodés en UTF-8. \\ |
| 2 | U+0080 | U+07FF | 110xxxxx | 10xxxxxx | | | | Les caractères codés sur plus d'un octet ont tous le bit de poids fort à 1, de telle sorte qu'ils sont en général ignorés par les logiciels qui ne connaissent que le code ASCII. |
| 3 | U+0800 | U+FFFF | 1110xxxx | 10xxxxxx | 10xxxxxx | | | ^ Nb Octets ^ Premier "code point" ^ Dernier "code point" ^ Octet 1 ^ Octet 2 ^ Octet 3 ^ Octet 4 ^ |
| 4 | U+10000 | U+10FFFF | 11110xxx | 10xxxxxx | 10xxxxxx | 10xxxxxx | | | 1 | U+0000 | U+007F | 0xxxxxxx | | | | |
| | 2 | U+0080 | U+07FF | 110xxxxx | 10xxxxxx | | | |
| | 3 | U+0800 | U+FFFF | 1110xxxx | 10xxxxxx | 10xxxxxx | | |
| | 4 | U+10000 | U+10FFFF | 11110xxx | 10xxxxxx | 10xxxxxx | 10xxxxxx | |
| |
__Principe de l'encodage__ | __Principe de l'encodage__ |
* Si le bit de poids fort d'un octet est à 0, alors il s'agit d'un caractère ASCII codé sur les 7 bits restants. | * Si le bit de poids fort d'un octet est à 0, alors il s'agit d'un caractère ASCII codé sur les 7 bits restants. |
* Sinon, les premiers bits de poids fort de l'octet indiquent le nombre d'octets utilisés pour encoder le caractère à l'aide d'une séquence de bits à 1 et se termine par un bit à 0.\\ Exemple : 110xxxxx signifie que le caractère est codé sur 2 octets. | * Sinon, les premiers bits de poids fort de l'octet indiquent le nombre d'octets utilisés pour encoder le caractère à l'aide d'une séquence de bits à 1 et se termine par un bit à 0.\\ Exemple : 110xxxxx signifie que le caractère est codé sur 2 octets. |
| * Dans le cas d'un encodage sur k octets, les k-1 octets qui suivent l'octet de poids fort doivent tous être de la forme 10xxxxxx. |
//Exemples// | //Exemples// |
^ Pt de code ^ pt code binaire ^ UTF-8 (binaire/hexa) ^ | ^ Pt de code ^ point de code binaire ^ UTF-8 (binaire/hexa) ^ |
| U+004B | 01001011 | 01001011 (4b) | | | U+004B | 01001011 | 01001011 (4b) | |
| U+004B | 11000101 | 11000011 (C3) 10000101 (85) | | | U+00C5 | 11000101 | 11000011 (C3) 10000101 (85) | |
| U+004B | 00001010 10011100 | 11100000 (E0) 10101010 (AA) 10011100 (9C) | | | U+0A9C | 00001010 10011100 | 11100000 (E0) 10101010 (AA) 10011100 (9C) | \\ \\ |
| |
| == 5.3.2 UTF16 == |
| Voir <html><a href="https://fr.wikipedia.org/wiki/Unicode" target="_blank">Unicode</a></html> sur Wikipédia. \\ \\ |
| |
| == 5.3.3 UTF-32 == |
| Voir <html><a href="https://fr.wikipedia.org/wiki/Unicode" target="_blank">Unicode</a></html> sur Wikipédia. \\ \\ |
| |
| == 5.3.4 UNICODE et Python == |
| {{ :python:python.png?nolink&50|}} |
| |
| <callout type="primary" icon="true">Les chaînes de caractères en Python sont des séquences de caractères au format **UTF-8**. Ces caractères peuvent être saisi directement avec leur point de code à l'aide d'une séquence d'échapement '\u' suivie du point de code en hexadécimal.</callout> |
| |
| //Exemple// |
| <code python *.py> |
| a = '\u0042' |
| print(a) # Affichage du caractère A |
| </code> |
| |
| A compléter |
| |
{{ :python:python.png?nolink&50|}} | {{ :python:python.png?nolink&50|}} |
=== 5.5 Les chaînes de caractères en Python === | === 5.4 Les chaînes de caractères en Python === |
Voir [[python:bases:chaines|Les séquences : chaînes de caractères]] | Voir [[python:bases:chaines|Les séquences : chaînes de caractères]] |
| |
| ==== 6. Pour aller plus loin ==== |
| **Real Python** - <html><a href="https://realpython.com/python-encodings-guide/" target="_blank">Unicode & Character Encodings in Python: A Painless Guide</a></html> |
| |
---- | ---- |