Mais le problème ne viens pas de "cout" ou des "strings" car ce code fonctionne
Parce que ton éditeur de texte et/ou ton compilo utilisent le même encodage que std::cout et/ou ta console. A savoir UTF-8 sous Unix, et probablement CP1252 sous Windows. Quand tu tapes "é" dans ton code source, ce n'est pas la même valeur qu'un "é" récupéré via un évènement SFML, bien que ce soit la même lettre. Car différents encodages sont utilisés.
Il faut bien comprendre qu'à chaque étape où du texte est manipulé (édition du fichier source, compilation, interprétation par std::cout, affichage dans la console), il y a potentiellement un encodage qui entre en jeu, et si un seul d'entre eux diffère de ce qui est attendu, le texte sera altéré. Tu ne peux donc pas tirer des conclusions à la légère.
La seule manière d'être sûr que quelque chose fonctionne ou ne fonctionne pas, c'est d'être certain que tous les encodages qui entrent en jeu, depuis l'aquisition du texte jusqu'à son affichage final, sont compatibles entre eux. Ce qui n'est pas le cas, puisque SFML travaille en UTF-32 et pas le reste. Comme je l'ai dit, la seule façon fiable d'afficher le résultat de l'évènement sf::TextEntered directement, c'est via un sf::Text.