L3 - Génie Logiciel – Jeux et encodage de caractères

Programming, Encoding, Character Sets · lab

Voir tous les documents en génie logiciel

L3 - Génie Logiciel – Jeux et encodage de caractères

Des caractères aux octets

Vous allez étudier dans ce TP l’encodage des caractères dans un jeu (attribuant à un caractère

un numéro entier), puis le transfert des numéros dans les jeux sous forme de suite d’octets.

Pour tester vos scripts ou programmes avec des caractères intéressants, dont la transformation

en suite d’octets est intéressante d’un jeu de caractère à un autre (par exemple Unicode, Latin-

1 ou JIS X 0208) et d’un format de transfert à un autre (par exemple UTF-8, Latin-1 ou Shift-

JIS), basez vous sur les caractères mentionnés à la fin de cet énoncé.

Scripts bash

Visualisation de la locale en cours d’utilisation :

$ locale

Locales actuellement disponibles sur le système :

$ locale -a

Changement de la locale de la session courante :

$ LC_ALL=de_DE.utf8

$ date

Mo 15. Okt 15:34:11 CEST 2012

$ date

Mon Oct 15 15:33:24 CEST 2012

Programme en C++

Créez un programme en C++, sous Eclipse CDT ou en ligne de commande. Votre programme

est idéalement en C++11 (sous Eclipse, clic droit sur le projet type Managed C++ Build, puis

Publicité

C/C++ Build > Settings > Dialect > Language standard > ISO C++ 11).

Il doit contenir le code de démarrage suivant :

#include <iostream>

int main(int argc, char **argv)

{

return 0 ;

}

Avec le débogueur ou avec la console, testez la représentation des chaînes avec char[],

std::string et std::wstring. Il est recommandé de compiler en C++11 votre programme.

Pour demander à la sortie standard d’encoder une chaîne avec un encodage précis, utiliser

iostream::imbue. Rappelons que, par défaut, std::cout et std::wcout utilisent la locale du stdout

du C.

std::ios_base::sync_with_stdio(false);

std::wcout.imbue(locale(“fr_FR.utf8”));

[email protected] - 2019

Veillez à bien maîtriser l’encodage du code source lui-même de votre fichier C++. Rappelez-

vous que le compilateur (gcc) considère que le fichier source est encodé suivant la variable

LANG de la session courante.

Programme C++ avancé

Créez un programme C++. Faites saisir à l’utilisateur une chaine de caractère et afficher une

suite d’entiers dans la console correspondant à l’encodage ISO-8859-1 de cette chaine. Indice :

utilisez la fonction C++11 codecvt (veillez à bien configurer le compilateur pour compiler en

Publicité

C++11).

Programme Java

Veillez à bien maîtriser l’encodage du fichier .java que vous éditez. Dans Eclipse, l’encodage est

visible dans les Preferences.

Démarrez un programme Java et testez les caractères Unicode dans les chaines, la conversion

en UTF-8, voire en ISO-8859-1 (Latin-1). Pour tester des caractères Unicode complexes,

regardez les exemples en bas de ce document.

Page web HTML

Votre fichier doit comporter la mention de l’encodage dans la section header :

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

C’est rigoureusement impératif pour que le navigateur interprète correctement la suite d’octets

que constitue le fichier qui lui est donné. Pour faire un test, mettez des accents dans le corps de

la page, et configurez votre éditeur de texte pour qu’il sauvegarde le fichier en Latin-1 (iso-

8859-1), puis en UTF-8. Changez la balise meta et observez les résultats.

Faites un hexdump de la page html pour voir si l’encodage correspond bien à vos attentes.

Programme PHP

Ouvrez un shell et tapez

$ php -S localhost:8000

Cela sert le répertoire courant dans un petit serveur Web.

Depuis un autre shell, éditer un fichier « test.php » contenant des instructions manipulant des

chaînes de caractères. Veillez à ce que ces chaînes soient correctement encodées, en utilisant les

bonnes API. Par exemple, pour afficher une variable :

Publicité

<script>

var myvar = <?php echo json_encode($myVarValue); ?>;

window.alert(myvar);

</script>

Faites la même chose pour encoder du contenu HTML textuel, dans un élément (innerHTML),

et dans un attribut d’élément. Choisissez un contenu comportant des caractères Unicode :

[email protected] - 2019

$unicodeChar = "\u{1000}";

Ou bien encodez vous-même la chaîne en UTF-8 par exemple, comme suit :

<?php

header('content-type:text/html;charset=utf8');

?>

<html>

<head>

</head>

<body>

<?php

echo("\xE3\x82\xA2"); // affiche un caractère oriental

?>

</body>

</html>

Vous pouvez également ajouter un tag meta à votre page et voir quel encodage votre

Publicité

navigateur choisi ; celui du code HTML, ou bien celui des headers (ce qui doit normalement

être le cas).

Enfin, initialisez la locale de PHP avec la locale correspondant au navigateur client. Le

navigateur client envoie sa locale dans sa requête HTTP. Pour visualiser la totalité des headers

envoyés depuis votre navigateur, aller sur :

https://manytools.org/http-html-text/http-request-headers/

Caractères Unicode pour tester

Vous pouvez tester votre programme avec les caractères Unicode suivant :

C/C++ : UTF-32 : \U0001F309 ou \U0002008A (caractère « Han » U+2008A).

Rappelons qu’en C/C++ il est possible d’utiliser la séquence d’échappement \UXXXXXXXX

pour représenter un caractère Unicode, ou bien \uXXXX si ce caractère tient dans un seul mot

16 bit UTF-16. Il n’est pas possible d’utiliser des surrogate pairs avec deux \u.

Java : UTF-16 : \ud83c\udf09 (Visuel :

)

Rappelons qu’en Java, il faut utiliser la représentation UTF-16. Ainsi, si un caractère utilise 2

mots UTF-16 (constituant une surrogate pair), il est possible de rentrer le caractère comme

indiqué ci-dessus.

[email protected] - 2019

Faites la même chose pour encoder du contenu HTML textuel, dans un élément (innerHTML), et dans un attribut d’élément. Choisissez un contenu comportant des caractères Unicode : [email protected] - 2019 $unicodeChar = \"\\u{1000}\"; Ou bien encodez vous-même la chaîne en UTF-8 par exemple, comme suit : Vous pouvez également ajouter un tag meta à votre page et voir quel encodage votre navigateur choisi ; celui du code HTML, ou bien celui des headers (ce qui doit normalement être le cas). Enfin, initialisez la locale de PHP avec la locale correspondant au navigateur client. Le navigateur client envoie sa locale dans sa requête HTTP. Pour visualiser la totalité des headers envoyés depuis votre navigateur, aller sur : https://manytools.org/http-html-text/http-request-headers/ Caractères Unicode pour tester Vous pouvez tester votre programme avec les caractères Unicode suivant : C/C++ : UTF-32 : \\U0001F309 ou \\U0002008A (caractère « Han » U+2008A). Rappelons qu’en C/C++ il est possible d’utiliser la séquence d’échappement \\UXXXXXXXX pour représenter un caractère Unicode, ou bien","datePublished":"2019-12-17","keywords":"caracte, encodage, programme, html, locale, votre, quot, bien, fichier, unicode","inLanguage":"fr","url":"https://www.universitylib.com/fr/documents/l3-genie-logiciel-jeux-et-encodage-de-caracteres-a0976e8172","isPartOf":{"@type":"WebSite","name":"UniversityLib","url":"https://www.universitylib.com/"}}