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