Le texte suivant a été encodé en ISO-8859-1, décodez-le.
01000001011101000111010001100101011011100111010001101001011011110110111
00010110000100000011000110110010100100000011011010110010101110011011100
11011000010110011101100101001000000110000100100000011001010110111000100
00001100110011000010110100101110100001000001100001110101001011101001100
00111010100100100000011001010110111001100011011011110110010011000011101
01001001000000110010101101110001000000101010101010100010001100010110100
11100000100000001000010000101000001010010101010110111000100000011100000
11000010110111001100111011100100110000101101101011011010110010100100000
00111010001000001100001010101011110000101010000001110110011011110110100
10111100000100000011000010110110101100010011010010110011101110101110000
11101010110010000001100100001001110111010101101110001000000110001111000
10110010011011101010111001000100000011100010111010101101001001011000010
00000110000101110101001000000111101011000011101010010111000001101000011
11001011100100010110000100000011100000111001011000011101010010110011011
00001110101000011100100110010100100000011011000110010101110011001000000
11010100110000101110100011101000110010101110011001000000110010001100101
00100000011010110110100101110111011010010111001111000010101000001100001
01011101100101110000010100000101001000101011011100110001101101111011001
00011001010111101000100000011011000110000100100000011100000110100001110
01001100001011100110110010100100000011001000010011101101001011011100111
01000111001001101111011001000111010101100011011101000110100101101111011
01110001000000110010001100101001000000110001101100101011101000010000001
10010101111000011001010111001001100011011010010110001101100101001000000
11001010110111000100000010101010101010001000110001011010011100000101110
Pour un décodage automatisé, peut-être préfèrerez-vous le message sous cette forme:
010000010111010001110100011001010110111001110100011010010110111101101110001011000010000001100011011001010010000001101101011001010111001101110011011000010110011101100101001000000110000100100000011001010110111000100000011001100110000101101001011101000010000011000011101010010111010011000011101010010010000001100101011011100110001101101111011001001100001110101001001000000110010101101110001000000101010101010100010001100010110100111000001000000010000100001010000010100101010101101110001000000111000001100001011011100110011101110010011000010110110101101101011001010010000000111010001000001100001010101011110000101010000001110110011011110110100101111000001000000110000101101101011000100110100101100111011101011100001110101011001000000110010000100111011101010110111000100000011000111100010110010011011101010111001000100000011100010111010101101001001011000010000001100001011101010010000001111010110000111010100101110000011010000111100101110010001011000010000001110000011100101100001110101001011001101100001110101000011100100110010100100000011011000110010101110011001000000110101001100001011101000111010001100101011100110010000001100100011001010010000001101011011010010111011101101001011100111100001010100000110000101011101100101110000010100000101001000101011011100110001101101111011001000110010101111010001000000110110001100001001000000111000001101000011100100110000101110011011001010010000001100100001001110110100101101110011101000111001001101111011001000111010101100011011101000110100101101111011011100010000001100100011001010010000001100011011001010111010000100000011001010111100001100101011100100110001101101001011000110110010100100000011001010110111000100000010101010101010001000110001011010011100000101110
def decoupage(chaine):
"""
Découpe la longue chaîne de caractères chaine en des petites chaînes de 8 caractères.
Les petites chaines sont stockees dans la liste retournee.
Parametres nommes
-----------------
chaine : de type str
La chaine de caratères 0 et 1 constituant le message a decoder.
Retourne
--------
liste : de type list
La liste des petites chaines de 8 caracteres 0 et 1.
"""
liste = []
for i in range(0, len(chaine), 8):
octet_str = chaine[i : i+8] # Extraction successive de petites chaines.
liste.append(octet_str)
return liste
ma_chaine = '010000010111010001110100011001010110111001110100011010010110111101101110001011000010000001100011011001010010000001101101011001010111001101110011011000010110011101100101001000000110000100100000011001010110111000100000011001100110000101101001011101000010000011000011101010010111010011000011101010010010000001100101011011100110001101101111011001001100001110101001001000000110010101101110001000000101010101010100010001100010110100111000001000000010000100001010000010100101010101101110001000000111000001100001011011100110011101110010011000010110110101101101011001010010000000111010001000001100001010101011110000101010000001110110011011110110100101111000001000000110000101101101011000100110100101100111011101011100001110101011001000000110010000100111011101010110111000100000011000111100010110010011011101010111001000100000011100010111010101101001001011000010000001100001011101010010000001111010110000111010100101110000011010000111100101110010001011000010000001110000011100101100001110101001011001101100001110101000011100100110010100100000011011000110010101110011001000000110101001100001011101000111010001100101011100110010000001100100011001010010000001101011011010010111011101101001011100111100001010100000110000101011101100101110000010100000101001000101011011100110001101101111011001000110010101111010001000000110110001100001001000000111000001101000011100100110000101110011011001010010000001100100001001110110100101101110011101000111001001101111011001000111010101100011011101000110100101101111011011100010000001100100011001010010000001100011011001010111010000100000011001010111100001100101011100100110001101101001011000110110010100100000011001010110111000100000010101010101010001000110001011010011100000101110'
ma_liste = decoupage(ma_chaine)
print(ma_liste)
def conversion_int(liste):
"""
Convertit les petites chaines de 8 caractères 0 et 1 présentes dans
la liste donnee en argument en des entiers. Les entiers sont stockes dans la liste retournee.
Parametres nommes
-----------------
liste : de type list
Une liste de petites chaines de 8 caracteres 0 et 1
Retourne
--------
liste_int : de type list
La liste contenant les petites chaines converties en entiers d'après leur valeur en binaire.
"""
liste_int = []
for i in range(len(liste)):
element = int(liste[i], 2) # Convertit en entier une chaine de 0 et de 1
liste_int.append(element)
return liste_int
ma_liste_int = conversion_int(ma_liste)
print(ma_liste_int)
def decode_latin1(liste_int):
"""
Retourne la liste des caracteres presents dans la liste d'entiers donnee en argument,
selon les points de code de la table de caracteres iso-8859-1 (ou latin-1).
Parametres nommes
-----------------
liste_int : de type list
Une liste d'entiers representant les caracteres du message a decoder.
Retourne
--------
liste_str : de type list
La liste des caracteres du message en suivant la charset 'latin-1'
"""
liste_str = []
for i in range(len(liste_int)):
caractere_str = chr(ma_liste_int[i]) # chr donne les points de code 'latin-1'
liste_str.append(caractere_str)
return liste_str
ma_liste_str = decode_latin1(ma_liste_int)
print(ma_liste_str)
Ci-dessus on découvre que ce message est en fait encodé en utf-8.
On va donc utiliser la méthode .decode pour decoder :
mon_message.decode('utf-8')
mon_message doit être du type bytes.
def decode_utf8(liste_int):
"""
Retourne la liste des caracteres presents dans la liste d'entiers donnee en argument,
selon les points de code de la table de caracteres utf-8.
Parametres nommes
-----------------
liste_int : de type list
Une liste d'entiers representant les caracteres du message a decoder.
Retourne
--------
liste_str : de type list
La liste des caracteres du message en suivant la charset 'utf-8'
"""
message_bytes = bytes(liste_int) # Convertit en bytes la liste d'entiers
message = message_bytes.decode('utf-8')
return message
ma_liste_str = decode_utf8(ma_liste_int)
print(ma_liste_str)
Ci-dessus on découvre la consigne " Encodez la phrase d'introduction de cet exercice en UTF-8" . La phrase est :
Le texte suivant a été encodé en ISO-8859-1, décodez-le.
def encode_utf8(chaine):
"""
Retourne en bytes les caracteres presents dans la chaine donnee en argument,
selon les points de code de la table de caracteres utf-8.
Parametres nommes
-----------------
chaine : de type str
Une chaine de caracteres a encoder.
Retourne
--------
octets : de type bytes
La chaine de bytes de la chaine encodee en suivant la charset 'utf-8'
"""
octets = chaine.encode('utf-8')
return octets
ma_chaine = 'Le texte suivant a été encodé en ISO-8859-1, décodez-le.'
mes_octets = encode_utf8(ma_chaine)
print(mes_octets)
def encode2_utf8(chaine):
"""
Retourne en bytes les caracteres presents dans la chaine donnee en argument,
selon les points de code de la table de caracteres utf-8.
Parametres nommes
-----------------
chaine : de type str
Une chaine de caracteres a encoder.
Retourne
--------
liste_octets : de type list
La listes d'octets de la chaine encodee en suivant la charset 'utf-8'
"""
octets = chaine.encode('utf-8')
liste_octets = []
for element in octets:
hexadecimal_str = hex(element) # Transforme l'ecriture de l'entier en chaine de caracteres hexadecimale
liste_octets.append(hexadecimal_str)
return liste_octets
ma_chaine = 'Le texte suivant a été encodé en ISO-8859-1, décodez-le.'
ma_liste = encode2_utf8(ma_chaine)
print(ma_liste)
def encode3_utf8(chaine):
"""
Retourne en bytes les caracteres presents dans la chaine donnee en argument,
selon les points de code de la table de caracteres utf-8.
Parametres nommes
-----------------
chaine : de type str
Une chaine de caracteres a encoder.
Retourne
--------
liste_bits : de type list
La listes de bits de la chaine encodee en suivant la charset 'utf-8'
"""
octets = chaine.encode('utf-8')
liste_bits = []
for element in octets:
binaire_str = bin(element) # Transforme l'ecriture de l'entier en chaine de caracteres binaire
liste_bits.append(binaire_str)
return liste_bits
ma_chaine = 'Le texte suivant a été encodé en ISO-8859-1, décodez-le.'
ma_liste = encode3_utf8(ma_chaine)
print(ma_liste)
def encode4_utf8(chaine):
"""
Retourne en bytes les caracteres presents dans la chaine donnee en argument,
selon les points de code de la table de caracteres utf-8.
Parametres nommes
-----------------
chaine : de type str
Une chaine de caracteres a encoder.
Retourne
--------
chaine_octets : de type str
La chaine de caracteres hexadecimaux de la chaine encodee en suivant la charset 'utf-8'
"""
octets = chaine.encode('utf-8')
chaine_octets = ''
for element in octets:
hexadecimal_str = hex(element) # Transforme l'ecriture de l'entier en chaine de caracteres hexadecimale
hexadecimal_str_nettoyee = hexadecimal_str[2:] # Elimine les caracteres 0x situes au debut.
chaine_octets = chaine_octets + hexadecimal_str_nettoyee + ' ' # Ajoute un bout de chaine et un espace.
return chaine_octets
ma_chaine = 'Le texte suivant a été encodé en ISO-8859-1, décodez-le.'
ma_chaine_octets = encode4_utf8(ma_chaine)
print(ma_chaine_octets)