From 3ab411ac354ef0c6f34132a28c502fd60c5be9db Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fran=C3=A7oise=20Conil?= <francoise.conil@insa-lyon.fr>
Date: Fri, 16 Dec 2022 16:39:43 +0100
Subject: [PATCH] =?UTF-8?q?Compl=C3=A9ment=20sur=20l'encodage=20utf-8=20du?=
 =?UTF-8?q?=20caract=C3=A8re=20'=C3=A8'?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 doc/encodages.md | 23 +++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/doc/encodages.md b/doc/encodages.md
index bbb1e98..d25510f 100644
--- a/doc/encodages.md
+++ b/doc/encodages.md
@@ -46,8 +46,8 @@ En latin1, les caractères sont codés sur un octet et on verra bien `0xe8` pour
 le caractère "è".
 
 ```python
->>> "3ème".encode("latin1")
-b'3\xe8me'
+>>> "è".encode("latin1"
+b'\xe8'
 ```
 
 En utf-8, les caractères dont la valeur est supérieure ou égale à `0x80` sont
@@ -55,14 +55,29 @@ codés sur 2 octets. Une partie des octets sert à indiquer quelle catégorie de
 caractère est encodé.
 
 ```python
->>> "3ème".encode("utf-8")
-b'3\xc3\xa8me'
+>>> "è".encode("utf-8")
+b'\xc3\xa8'
 ```
 
 C'est pourquoi quand on essaie de lire un fichier encodé en utf-8 en le
 décodant comme du latin1, on obtient des caractères erronés : ouvrir
 `basic_mauvais_latin1.html`.
 
+Dans l'encodage du caractère "è" sur 2 octets, les 3 premiers bits du premier
+octet sont `110`, les 2 premiers bits du 2ème octet sont `10`.
+
+Lorsque l'on récupère les 11 bits qui code le nombre associé au caractère "è",
+`00011101000` on retrouve bien l'entier 232 (0xe8 en hexadécimal).
+
+```python
+>>> bin(0xc3a8)
+'0b1100001110101000'
+   ---     --
+
+>>> hex(0b00011101000)
+'0xe8'
+```
+
 ## Convertir un fichier utf-8 en latin1
 
 J'utilise [iconv](https://doc.ubuntu-fr.org/iconv) pour convertir notre fichier
-- 
GitLab