Aller au contenu

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

  1. 48 65 6C 6C 6F
  2. 57 6F 72 6C 64
  3. 31 32 33 34 35

Encoder les messages suivants à l'aide de la table ASCII

  1. Hello
  2. 123
  3. !@#
  4. 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').

  1. Instancier la chaîne de caractère : La vitesse de la lumière est de 300 000km/s.
  2. 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"

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)

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)

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"
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'
...