IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

comment fonctionne l'encodage des caractères ?


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2016
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2016
    Messages : 19
    Points : 11
    Points
    11
    Par défaut comment fonctionne l'encodage des caractères ?
    Salut à tous

    Je me pose une question concernant l'encodage des caractères. Bon en y repensant c'est pas spécifique à Java mais la question m'est venu dans un projet Java avec servlets. Dans un formulaire en html obtenu à partir d'une page JSP, imaginons qu'on doit remplir un champ. La lettre 'A' représente le nombre 65 dans la table ASCII. Du coup si on tape 65 comme valeur de champ, comment peut on savoir s'il s'agit du caractère 'A' ou du vrai nombre 65 puisque les 2 sont équivalents ? Qui s'occupe de cette conversion : Java et son encodage (Unicode), la page html avec <meta charset="ut8"/> ou bien le processeur de la machine lui même ?

    De ce que j'ai compris c'est le processeur qui au final exécute les instructions en binaire or ces instructions comprennent un code opération (add, load, store etc) et une opérande (une donnée). Or cette donnée est codée en binaire. Si le processeur recoit la donnée 65 codée en binaire, comment sait il si c'est la valeur 65 ou la lettre 'A' codée en ASCII ?

    Merci

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ce sont les programmes, et non pas le processeur, qui savent faire la différence entre texte et binaire. Parce que oui, en effet, dans l'ordinateur tout est binaire.

    Ce n'est d'ailleurs pas qu'une question de texte ou autre. Prends un int et un float : les deux tiennent sur 32 bits (en tout cas en Java.) Du coup l'ordinateur il fait comment pour distinguer l'un ou l'autre quand c'est dans sa mémoire ou dans ses registres ? Il ne le fait pas. C'est juste le programme qui sait qu'à cet endroit il a mis un int et à cet autre endroit il a mis un float. Donc quand il touche à l'un il fait avec des trucs qu'on fait avec des ints, et quand il touche à l'autre il fait des trucs qu'on fait avec des floats. A part le programme lui-même, personne ne pourrait dire si c'est l'un ou l'autre, ou si ce n'est pas la moitié d'un long.

    Dans le même genre, char et short : ils font 16 bits chacun, l'un représente un caractère, l'autre un nombre sur deux octets. Même situation.



    Quand tu tapes ta JSP, tu ne tapes jamais que du texte, comme dans ce forum. Il y a des balises et ce n'est pas du français et tout, mais c'est du texte. Tu le tapes avec un éditeur de texte. Et l'éditeur de texte sait qu'il sert à éditer du texte. Donc quand tu lui touches la touche 'A', il sait qu'il doit insérer la lettre a à cet endroit. Pour ne pas l'oublier et le garder en mémoire, il fait de la place pour un* octet ici, et dans cet octet il stocke la valeur ASCII de la lettre a. Puis quand tu enregistres le fichier, il copie juste cette mémoire dans un fichier, tel quel.

    Quand tu envoies ce fichier au navigateur, le navigateur sait que le fichier représente une page web, et qu'une page web c'est au format HTML, et que le HTML c'est du texte. Donc il lit tous ces octets en partant du principe que c'est du texte. Et donc quand il tombe sur l'octet 65 et qu'il sait que ce qu'il est en train de lire c'est du texte, il considère qu'il vient de recevoir la lettre A.

    Fondamentalement on peut donc dire que c'est le langage, ici Java, qui décode binaire ou texte : si c'est un int ça représente un nombre, si c'est un char ça représente un caractère. Derrière le langage de programmation est compilé sous forme de programme exécutable, et ce programme est un amas d'instructions qui se souvienne où se trouvent les nombres et les textes dans la mémoire qu'elles gèrent.

    * En réalité, un caractère ne tient pas forcément en un octet. En Java par exemple il tiendrait plutôt sur deux. Cela dépend de l'encodage utilisé pour représenter du texte. ASCII n'est qu'une seule des nombreuses possibilités.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2016
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2016
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    OK merci c'est beaucoup plus clair maintenant !

Discussions similaires

  1. [mysql]encodage des caractères
    Par ideal23 dans le forum Requêtes
    Réponses: 4
    Dernier message: 27/10/2006, 13h16
  2. Probleme d'encodage des caractères spéciaux
    Par pacoulitou24 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 20/06/2006, 16h47
  3. Réponses: 15
    Dernier message: 24/02/2006, 14h17
  4. Comment fonctionnent les index des options d'un select ?
    Par pekka77 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/10/2005, 18h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo