Fiche d'exercices : Encodage des caractères
Encodage en table ASCII
Décoder les messages suivants en hexadécimal à l'aide de la table ASCII
48 65 6C 6C 6F
57 6F 72 6C 64
31 32 33 34 35
Encoder les messages suivants à l'aide de la table ASCII
Hello
123
!@#
Code
Python permet d'encoder des messages à l'aide de divers encodages. Il existe la méthode encode
des chaînes de caractères. Elle s'utilise de cette manière chaine_de_caractere.encode('Méthode d'encodage').
- Instancier la chaîne de caractère : La vitesse de la lumière est de 300 000km/s.
- Que se passe-t-il si l'on veut afficher l'encodage en ASCII de cette chaîne de caractère? Comment l'expliquer?
La méthode decode
de Python permet de donner le caractère associé à un point de code donné.
Cela s'utilise de cette manière : chaine_de_caractere.decode('Méthode de décodage').
Donner les caractères associés à ces points de code :
1. b'\x41'
2. b'\xce\xa9'
3. b'\xe3\x81\x93'
Exercice 4 - Conversion binaire vers ASCII ⭐⭐
**Convertir les séquences binaires suivantes en caractères ASCII :** 1. `01001000 01100101 01101100 01101100 01101111` 2. `01010000 01111001 01110100 01101000 01101111 01101110` 3. `00110001 00110010 00110011 00110100 00110101`
Solutions :
1. H-e-l-l-o → "Hello"
2. P-y-t-h-o-n → "Python"
3. 1-2-3-4-5 → "12345"
1. H-e-l-l-o → "Hello"
2. P-y-t-h-o-n → "Python"
3. 1-2-3-4-5 → "12345"
Exercice 5 - Encodage UTF-8 ⭐⭐⭐
**Comprendre l'encodage UTF-8 :** 1. Expliquer pourquoi le caractère 'é' nécessite 2 octets en UTF-8 2. Encoder le mot "café" en UTF-8 (donner les octets en hexadécimal) 3. Décoder la séquence UTF-8 : `C3 A9 74 C3 A9` 4. Combien d'octets sont nécessaires pour encoder "🐍" (emoji serpent) ?
1. Le 'é' a un point de code U+00E9 (233 en décimal), qui dépasse 127, donc nécessite l'encodage multi-octets UTF-8.
2. "café" → 63 61 66 C3 A9
3. "été"
4. 4 octets (F0 9F 90 8D)
2. "café" → 63 61 66 C3 A9
3. "été"
4. 4 octets (F0 9F 90 8D)
Exercice 6 - Programmation avec encodages ⭐⭐⭐
**Écrire des fonctions Python :** 1. `ascii_vers_binaire(texte)` : convertit un texte ASCII en binaire 2. `binaire_vers_ascii(binaire)` : convertit du binaire en texte ASCII 3. `compter_octets_utf8(texte)` : compte le nombre d'octets nécessaires en UTF-8 4. `est_ascii_pur(texte)` : vérifie si un texte ne contient que des caractères ASCII
def ascii_vers_binaire(texte):
return ' '.join(format(ord(c), '08b') for c in texte)
def binaire_vers_ascii(binaire):
octets = binaire.split()
return ''.join(chr(int(b, 2)) for b in octets)
def compter_octets_utf8(texte):
return len(texte.encode('utf-8'))
def est_ascii_pur(texte):
return all(ord(c) < 128 for c in texte)
return ' '.join(format(ord(c), '08b') for c in texte)
def binaire_vers_ascii(binaire):
octets = binaire.split()
return ''.join(chr(int(b, 2)) for b in octets)
def compter_octets_utf8(texte):
return len(texte.encode('utf-8'))
def est_ascii_pur(texte):
return all(ord(c) < 128 for c in texte)
Exercice 7 - Chiffrement César ⭐⭐⭐
**Implémenter le chiffrement César avec les codes ASCII :** 1. Écrire `chiffrer_cesar(texte, decalage)` qui décale chaque lettre 2. Écrire `dechiffrer_cesar(texte_chiffre, decalage)` pour déchiffrer 3. Tester avec le message "HELLO" et un décalage de 3 4. Que devient "PYTHON" avec un décalage de 13 ?
def chiffrer_cesar(texte, decalage):
resultat = ""
for c in texte:
if c.isalpha():
base = ord('A') if c.isupper() else ord('a')
resultat += chr((ord(c) - base + decalage) % 26 + base)
else:
resultat += c
return resultat
def dechiffrer_cesar(texte_chiffre, decalage):
return chiffrer_cesar(texte_chiffre, -decalage)
3. "HELLO" → "KHOOR"resultat = ""
for c in texte:
if c.isalpha():
base = ord('A') if c.isupper() else ord('a')
resultat += chr((ord(c) - base + decalage) % 26 + base)
else:
resultat += c
return resultat
def dechiffrer_cesar(texte_chiffre, decalage):
return chiffrer_cesar(texte_chiffre, -decalage)
4. "PYTHON" → "CLGUBA"
📋 Rappel - Table ASCII (extrait) :
32=' ' 33='!' 48='0' 49='1' 65='A' 66='B' 97='a' 98='b'
34='"' 35='#' 50='2' 51='3' 67='C' 68='D' 99='c' 100='d'
...
32=' ' 33='!' 48='0' 49='1' 65='A' 66='B' 97='a' 98='b'
34='"' 35='#' 50='2' 51='3' 67='C' 68='D' 99='c' 100='d'
...