Forum de la communauté SFML

Aide => Réseau => Discussion démarrée par: Sipige le Mars 02, 2018, 05:00:44 pm

Titre: Problème accents sf::http
Posté par: Sipige 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
Titre: Re: Problème accents sf::http
Posté par: Laurent 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 ;)
Titre: Re: Problème accents sf::http
Posté par: Sipige 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.
Titre: Re: Problème accents sf::http
Posté par: Laurent 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.
Titre: Re: Problème accents sf::http
Posté par: Sipige 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.
Titre: Re: Problème accents sf::http
Posté par: Laurent 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/
Titre: Re: Problème accents sf::http
Posté par: Sipige 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ù.
Titre: Re: Problème accents sf::http
Posté par: Laurent 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.
Titre: Re: Problème accents sf::http
Posté par: Sipige 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.
Titre: Re: Problème accents sf::http
Posté par: Laurent 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 ;)
Titre: Re: Problème accents sf::http
Posté par: Sipige 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.
Titre: Re: Problème accents sf::http
Posté par: Sipige 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);
 
Titre: Re: Problème accents sf::http
Posté par: Laurent le Mars 21, 2018, 08:25:57 pm
"Ca ne marche pas" n'est pas une description de problème ;)
Titre: Re: Problème accents sf::http
Posté par: Sipige 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é.
Titre: Re: Problème accents sf::http
Posté par: Laurent le Mars 22, 2018, 07:49:38 am
Je ne vois pas d'accent dans le premier exemple.
Titre: Re: Problème accents sf::http
Posté par: Sipige le Mars 22, 2018, 07:03:56 pm
Non j'ai oublié de le mettre mais dans mon test il y était.
Titre: Re: Problème accents sf::http
Posté par: Hiura le Mars 23, 2018, 06:59:59 am
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);
 

Char* + char* n'est pas une concaténation de chaînes.

Après je sais pas quelles autres fautes tu as fait dans l'autre exemple comme il était mal copié collé.
Titre: Re: Problème accents sf::http
Posté par: Sipige le Mars 23, 2018, 04:46:22 pm
Ah oui, enfin considère que body2 est égal à "test=testé".
Titre: Re: Problème accents sf::http
Posté par: Laurent le Mars 23, 2018, 06:33:20 pm
On dirait que tu continues à tester des trucs un peu au hasard. Est-ce que tu as potassé le sujet des encodages et compris de quoi il retournait ?
Titre: Re: Problème accents sf::http
Posté par: Sipige le Mars 24, 2018, 01:20:24 pm
Citer
"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 ;)
Je ne suis pas sûr, mais je pense que cela ne vient pas du premier encodage. Le second me parait ne pas poser de problème et de toute façon, à la base j'utilise du texte rentré par l’utilisateur donc non-compilé. A mon avis, c'est le troisième qui bloque. Le problème, c'est que je sais pas quoi faire pour que le string soit converti en utf-8 par le sf::String.
Titre: Re: Problème accents sf::http
Posté par: Laurent le Mars 24, 2018, 10:03:16 pm
Citer
Je ne suis pas sûr, mais je pense que cela ne vient pas du premier encodage.
Celui-ci est facile à vérifier : ton éditeur de code a très certainement une option pour choisir l'encodage lors de la sauvegarde du fichier. Mais puisque ton texte n'est pas hard-codé on s'en fiche :)

Citer
à la base j'utilise du texte rentré par l’utilisateur
Ce serait vraiment sympa de ta part de poster du code qui correspond réellement à ton problème... L'utilisateur rentre son texte par quel moyen ? On peut voir le code correspondant ?

Citer
A mon avis, c'est le troisième qui bloque
Non, si tu as utilisé sf::String::fromUtf8 tu règles bien ce problème (pour autant que ta chaîne source soit bien en UTF-8).
Titre: Re: Problème accents sf::http
Posté par: Sipige le Mars 25, 2018, 01:47:37 pm
Le code est vraiment trop long. Imagine une classe textEdit qui possède un string textEntered et des fonctions pour le modifier.
J'ajoute les caractères entrés avec :
if (event.type == sf::Event::TextEntered && entreeTexte.isActive())
{
     if (static_cast<int>(event.text.unicode) != 8 && static_cast<int>(event.text.unicode) != 13)
     {
          char caractere = static_cast<char>(event.text.unicode);
          entreeTexte.setTextEntered(entreeTexte.getTextEntered() + to_string(caractere));
          sf::sleep(sf::milliseconds(50));
     }
}
Et à la fin je met le setBody() de la requête à entreeTexte.getTextEntered().
Titre: Re: Problème accents sf::http
Posté par: Laurent le Mars 25, 2018, 04:22:27 pm
Citer
char caractere = static_cast<char>(event.text.unicode);
Là il y a déjà un gros problème : tu convertis en char (8 bits) un élément UTF-32 (32 bits). Il y a donc forcément de la perte... Si tu travailles avec des sf::String pas besoin de passer par cette conversion inutile qui te fait perdre 99% de la plage Unicode : un simple sf_string += event.text.unicode suffit et fonctionne très bien.
Titre: Re: Problème accents sf::http
Posté par: Sipige le Mars 27, 2018, 07:26:51 pm
Ah oui merci.
Je l'ai corrigé mais de toute façon, même en envoyant du texte directement rentré dans le code le résultat est le même.
Titre: Re: Problème accents sf::http
Posté par: Sipige le Mars 31, 2018, 06:43:52 pm
Hélas, je vais être obligé d'utiliser la technique ultime.

(click to show/hide)
Titre: Re: Problème accents sf::http
Posté par: Sipige le Avril 02, 2018, 10:30:53 am
Bon ben ça marche pas cette technique. Au final j'ai trouvé une solution sans accents.