Files
1ereNSI/representation_base/chapitre_5/td/ENONCE.md

99 lines
4.4 KiB
Markdown
Raw Normal View History

2023-07-03 19:43:03 +02:00
## **TD : Manipulation des encodages de caractères**
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
### **Objectifs** :
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
1. Comprendre comment les caractères sont encodés en utilisant différents systèmes d'encodage.
2. Savoir comment convertir entre différents encodages.
3. Être capable d'identifier l'encodage utilisé pour un texte donné.
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
### **Partie 1 : Découverte des encodages**
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
Pour cette partie, utilisez un éditeur de texte qui permet de choisir l'encodage lors de l'enregistrement d'un fichier (comme Notepad++).
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
1. Créez un nouveau fichier texte, et écrivez le mot "Bonjour" dedans.
2. Enregistrez le fichier en utilisant l'encodage ASCII. Qu'observez-vous ?
3. Réessayez en utilisant l'encodage ISO-8859-1. Qu'est-ce qui change ?
4. Enfin, enregistrez le fichier en utilisant l'encodage UTF-8.
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
### **Partie 2 : Conversion entre encodages**
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
Pour cette partie, utilisez un outil en ligne qui permet de convertir entre différents encodages, comme [cet outil](https://www.browserling.com/tools/text-to-binary).
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
1. Choisissez un mot ou une phrase en français qui utilise des caractères accentués (par exemple, "révolution").
2. Convertissez ce texte en binaire en utilisant l'encodage UTF-8. Notez le résultat.
3. Convertissez maintenant le même texte en binaire en utilisant l'encodage ISO-8859-1. Notez le résultat.
4. Comparez les deux résultats. Qu'observez-vous ?
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
### **Partie 3 : Identification de l'encodage**
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
Pour cette partie, utilisez un outil en ligne qui permet de deviner l'encodage d'un texte, comme [cet outil](https://dencode.com).
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
1. Choisissez trois textes différents, de préférence dans différentes langues.
2. Convertissez chaque texte en binaire en utilisant un encodage différent pour chaque texte.
3. Utilisez l'outil pour essayer de deviner quel encodage a été utilisé pour chaque texte. L'outil a-t-il raison ?
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
### **Partie 4 : Python**
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
1. Dans un interpréteur Python, exécutez successivement les instructions `chr(212)` et `chr(169)`. Qu'en déduisez-vous sur la spécification de la fonction `chr`?
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
```python
>>> chr(212)
'Ô'
>>> chr(169)
'©'
```
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
2. Dans un interpréteur Python, exécutez successivement les instructions `ord('©')` et `ord('à')`. Qu'en déduisez-vous sur la spécification de la fonction `ord`?
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
```python
>>> ord('©')
169
>>> ord('à')
224
```
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
3. Écrire une fonction `binaire_utf8`, qui prend en paramètre un point de code Unicode sous la forme d'un entier et renvoie la représentation binaire UTF-8 du caractère associé, sous la forme d'une liste d'octet (un octet est une liste de bits).
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
Conseil : Vous pouvez réutiliser les fonctions de conversion en binaire des précédentes séances ainsi que la méthode vu en cours.
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
```python
def binaire_utf8(code):
binaire_code = binaire(code)
if len(binaire_code) < 8:
return binaire_code
elif 8 <= binaire_code < 12:
return '110' + binaire_code[:5] + '10' + binaire_code[5:]
elif 12 <= binaire_code < 17:
return '1110' + binaire_code[:4] + '10' + binaire_code[4:10] + '10' + binaire_code[10:]
elif 17 <= binaire_code:
return '11110' + binaire_code[:3] + '10' + binaire_code[3:9] + '10' + binaire_code[9:15] + '10' + binaire_code[15:]
```
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
***Q4.*** Écrire une fonction `str_to_utf8`, qui prend en paramètre une chaine de caractère et renvoie la représentation binaire UTF-8, en hexadécimal, de l'ensemble des caractères de la chaine. Exécutez votre fonction sur la chaine `Rien ne sert de courir ; il faut partir à point. Le Lièvre et la Tortue en sont un témoignage.` Comparez le résultat obtenu avec celui de l'observation 12.
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
```python
def str_to_utf8(chaine):
l = []
for caractere in chaine:
l.append(hexadecimal(binaire_utf8(ord(caractere))))
return l
```
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
**Réflexion Finale** :
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
1. Pourquoi est-il important de connaître l'encodage utilisé pour un texte ?
2. Quels problèmes peut-on rencontrer si on utilise le mauvais encodage pour lire un texte ?
3. Comment l'UTF-8 a-t-il aidé à résoudre certains de ces problèmes ?
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
--------------
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
Auteurs : Florian Mathieu - Philippe Boddaert
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
Licence CC BY NC
2021-09-01 18:26:16 +02:00
2023-07-03 19:43:03 +02:00
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a> <br />Ce cours est mis à disposition selon les termes de la <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Licence Creative Commons Attribution - Pas dUtilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</a>.