Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Problème accents sf::http  (Lu 12198 fois)

0 Membres et 2 Invités sur ce sujet

Sipige

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
Problème accents sf::http
« le: Mars 02, 2018, 05:00:44 pm »
Bonjour,

Je ne sais pas pourquoi mais mes requêtes http ne me revoient pas les accents de pages html.
Pourtant quand j'y accède avec un navigateur ils sont bien là.
Y aurait-il quelque chose à rajouter ?

edit :
En fait ça doit plutôt être un problème de format car si je l'enregistre dans un fichier on trouve les accents mais sur les autre string je n'ai pas de problèmes.

edit2 :
Ça marcherait ça ?
wstring newBody;
newBody.assign(response.getBody().begin(), response.getBody().end());

Merci
« Modifié: Mars 02, 2018, 05:58:24 pm par Sipige »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re: Problème accents sf::http
« Réponse #1 le: Mars 02, 2018, 08:04:10 pm »
Ta réponse HTML possède un encodage (c'est un champ meta de l'en-tête), utilise le à bon escient. L'affichage de texte ça ne marche pas magiquement tout seul, à moins de rester dans la plage ASCII, mais si tu parles d'accents ce n'est visiblement pas le cas ;)
Laurent Gomila - SFML developer

Sipige

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
Re: Problème accents sf::http
« Réponse #2 le: Mars 03, 2018, 11:35:32 am »
Ok mais alors comment faire pour l'afficher ?
J'ai essayé avec les wstrings et cela n'a que fait changer les é en □.

edit :
Et normalement ça ne vient pas de la police.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re: Problème accents sf::http
« Réponse #3 le: Mars 03, 2018, 02:36:04 pm »
N'essaye pas des choses au hasard, ça ne marchera pas -- et même si par chance tu arrives à un code qui marche tu n'auras quand même pas compris grand chose :)

Comment faire pour afficher ton texte ? Difficile à dire, puisque tu n'as pas dit / montré ce que tu en faisais. Tu le dessines à l'écran via un sf::Text ? Si c'est le cas, regarde la documentation de sf::String, il y a tout un tas de fonctions qui permettent de convertir depuis un encodage donné. Si ce n'est pas de l'UTF, il faudra utiliser une locale.
Laurent Gomila - SFML developer

Sipige

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
Re: Problème accents sf::http
« Réponse #4 le: Mars 03, 2018, 06:34:04 pm »
Ok mais je ne comprend pas trop.
Je dessine bien le texte avec sf::Text mais le problème vient avant.
Le string égal response.getBody() comporte les caractères "é" mais que dois-je faire après ?
Je ne comprends pas pourquoi un string peut contenir le caractère 'é' mais qu'ici il le transforme.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re: Problème accents sf::http
« Réponse #5 le: Mars 03, 2018, 07:40:37 pm »
Un caractère est représenté par un code (une suite de bits). Et ce code peut représenter tout et n'importe quoi si tu ne l'interprètes pas avec le bon encodage, d'où l'importance d'effectuer les bonnes conversions / interprétations pour que ton texte arrive sans encombre jusqu'à l'utilisateur final.

Par exemple : le code UTF-8 du caractère 'é' est 0xC3 0xA9, mais décodé en iso-8859-1 cela donne "é".

Je te conseille très très fortement de lire ce genre d'article : http://kunststube.net/encoding/
« Modifié: Mars 03, 2018, 07:44:21 pm par Laurent »
Laurent Gomila - SFML developer

Sipige

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
Re: Problème accents sf::http
« Réponse #6 le: Mars 04, 2018, 11:13:25 am »
Merci beaucoup c'est plus clair maintenant.
Il suffisait de faire :
sf::String sfBody = sf::String::fromUtf8(response.getBody().begin(), response.getBody().end());
string body;
body = sfBody;

Mais par contre je n'arrive pas à envoyer les accents avec la méthode post.
Le string que j'envoie à request.setBody() les contient mais ils disparaissent je ne sais où.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re: Problème accents sf::http
« Réponse #7 le: Mars 04, 2018, 12:15:38 pm »
Citer
Il suffisait de faire
Si toutefois l'attribut "charset" de ton document HTML est "utf-8". Cela pourrait être autre chose -- après il faut voir quel niveau de flexibilité tu as besoin de gérer.

Citer
Mais par contre je n'arrive pas à envoyer les accents avec la méthode post.
Le string que j'envoie à request.setBody() les contient mais ils disparaissent je ne sais où.
Là il y a encore plus d'étapes où tu peux te faire avoir, car il y a plus d'encodages et de conversions qui sont impliqués. Il faudrait que tu montres le code en question.
Laurent Gomila - SFML developer

Sipige

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
Re: Problème accents sf::http
« Réponse #8 le: Mars 05, 2018, 12:24:40 pm »
Je n'ai aucune flexibilité à gérer car je veux juste que ça marche sur mon site.

Pour ce qui est du code j'ai juste fait quelque chose qui ressemble à ça :
string test = "testé";
request.setBody("test=" + test);
Ensuite, tout les caractères situés après un accent sont supprimés.
Il faudra que je vérifie si les accents arrivent jusqu'à la page mais pour l'instant je n'ai pas le temps.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re: Problème accents sf::http
« Réponse #9 le: Mars 05, 2018, 12:59:52 pm »
"testé" est enregistré dans un fichier, donc soumis à un premier encodage qui est celui de ton éditeur de texte. Ensuite un second intervient : celui qu'utilise le compilateur pour transformer ton fichier source en fichier compilé. Enfin, il y a celui qu'utilise SFML pour convertir ta std::string en sf::String, et qui est celui de la locale par défaut. Je te laisse creuser un peu pour trouver comment gérer tout ça ; la solution n'est pas forcément compliquée mais il est important de bien comprendre ce que tu fais ;)
Laurent Gomila - SFML developer

Sipige

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
Re: Problème accents sf::http
« Réponse #10 le: Mars 21, 2018, 06:15:32 pm »
J'ai essayé le code de l'exemple :
std::ostringstream stream;
stream << "test=" << "peu importe";
request.setBody(stream.str());
 
Mais ça ne marche toujours pas.

Sipige

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
Re: Problème accents sf::http
« Réponse #11 le: Mars 21, 2018, 06:35:50 pm »
Et ça non plus :
sf::String body;
string body2 = "test=" + "testé";
body = sf::String::fromUtf8(body2.begin(), body2.end());
request.setBody(body);
sf::Http::Response response = http.sendRequest(request);
 

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re: Problème accents sf::http
« Réponse #12 le: Mars 21, 2018, 08:25:57 pm »
"Ca ne marche pas" n'est pas une description de problème ;)
Laurent Gomila - SFML developer

Sipige

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
Re: Problème accents sf::http
« Réponse #13 le: Mars 21, 2018, 08:27:31 pm »
Le premier supprime tout les caractères après l'accent, le deuxième met un caractère bugué.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re: Problème accents sf::http
« Réponse #14 le: Mars 22, 2018, 07:49:38 am »
Je ne vois pas d'accent dans le premier exemple.
Laurent Gomila - SFML developer