Ne marche que sous Linux, car sous Windows ne convertit pas en UTF-8 comme je le voudrais![]()
Ne marche que sous Linux, car sous Windows ne convertit pas en UTF-8 comme je le voudrais![]()
Arf, �a donne quoi sous Windows ?
Si vous ne trouvez plus rien, cherchez autre chose...
Vous trouverez ici des tutoriels OpenGL moderne.
Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
Un projet qui ne sert � rien, mais qu'il est joli (des fois) : ProceduralGenerator (G�n�ration proc�durale d'images, et post-processing).
Pour moi �a code en ANSI, mais j'ai des accents tout bien mais ce n'est pas de l'UTF-8 or pour mon appli l'encodage de r�f�rence est l'UTF-8Mais au moins maintenant je n'ai plus besoin de forcer l'encodage de mon fichier XML en UTF-8, je peux le mettre en ce que je veux, car je transforme toutes les cha�ne en UTF-8 dans le code
Donc ce n'est pas trop graveen tout cas j'ai not� la m�thode le jour ou je voudrais faire une appli avec des soucis d'encodage exclusivement sous Linux
![]()
mais pour transformer une chaine en UTF-8 il faut savoir l'encodage de ton fichier non? sinon Qt ne va pas non plus reussir, il prend par default l'encodage de l'OS. A noter que QApplication est absolument necessaire ici car sinon la conversion n'est pas correcte.
Sous windows, ca ne marche pas sauf si on mets:
avant.
Code : S�lectionner tout - Visualiser dans une fen�tre � part setlocale(LC_ALL, "");
Ensuite:
marche (l_loc.name() == "C"), la conversion est correcte
Code : S�lectionner tout - Visualiser dans une fen�tre � part std::locale l_loc;
marche, mais seulement sous visual studio, sous gcc cette locale n'existe pas
Code : S�lectionner tout - Visualiser dans une fen�tre � part std::locale l_loc("Swedish_Sweden.1252");
marche, mais la conversion est incorrecte (
Code : S�lectionner tout - Visualiser dans une fen�tre � part std::locale l_loc("Thai_Thailand.874");
test des caract�res su�dois: ���
test des caract?res su?dois: ???
)
Et personne ne tente UTF8CPP? Juste pour voir? Parceque je vois pas en quoi �a r�souds pas le probl�me...
a part manipuler les chaines UTF8, est ce que UTF8CPP peut traduire d'une cha�ne ASCII d'encodage courant vers UTF-8? je n'ai pas vu ca.
Car c'est bien la le probl�me: comment passer de l'encodage courant (qui peut etre UTF-8, su�dois, thailandais, etc etc) a un encodage unicode. Pass� ce point, UTF8CPP ou n'importe quelle biblioth�que Unicode est parfaite.
C'est d'ailleurs a ce moment que Qt est devenu interessant.
ce que je ne comprends pas, c'est qu'on veut transformer de l'XML en UTF-8
la solution trouv� est Qt, pas iconv car il faut specifier l'encodage source.
ce que je ne comprends pas, c'est que Qt fait la meme chose, sauf qu'il prend par default l'encoding par default du system. Est-ce voulu comme ca?
Ca ne me semble pas consistent comme solution.
UTF8CPP ne me convient pas du tout car elle ne permet pas de convertir une cha�ne encod� dans n'importe quel encodage en UTF-8.
Ensuite epsilon j'ai l'impression que tu n'as pas bien compris quel �tait mon but, regarde mon premier post je pense qu'une fois que tu l'auras lu tu comprendras mieux![]()
oui tu as raison, j'avais mal compris.
cependant, en fouillant dans la doc de ICONV, en passant "" dans "from_locale",
tu obtiens la locale courante.
En faisant une recherche sur la conversion ASCII => UTF-8, je suis tomb� sur le blog d'Emmanuel Deloget qui d�finit la fonction suivate :
�a utilise la facette codecvt, qui permet normalement une meilleure conversion que ctype (celle que j'utilisais). Par contre il faut d�finir une locale en d�but de programme.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 std::wstring s2w( const std::string & s, const std::locale & loc = std::locale()) { typedef std::codecvt <wchar_t, char, std::mbstate_t> facet_type; typedef facet_type::result result_type; std::mbstate_t state = std::mbstate_t(); result_type result; std::vector <wchar_t> buffer( s.size()); const char * end_in_ptr = NULL; wchar_t * end_out_ptr = NULL; result = std::use_facet<facet_type>( loc).in( state, s.data(), s.data() + s.length(), end_in_ptr, & buffer.front(), & buffer.front() + buffer.size(), end_out_ptr ); return std::wstring( & buffer.front(), end_out_ptr); }
Voil� le lien vers la page du blog : http://blog.emmanueldeloget.com/inde...ationalisation
Par contre, au niveau de l'�criture dans un fichier en UTF-8, tu utilises std::ofstream ou FILE ? Parce qu'avec FILE, pour �crire en UTF-8 il faut ouvrir ton fichier avec comme mode "w, ccs=UTF-8".
Si vous ne trouvez plus rien, cherchez autre chose...
Vous trouverez ici des tutoriels OpenGL moderne.
Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
Un projet qui ne sert � rien, mais qu'il est joli (des fois) : ProceduralGenerator (G�n�ration proc�durale d'images, et post-processing).
Tr�s int�ressant cette fonctionmais malheureusement marche pas avec visual studio mais juste avec MinGW (GCC)
Ce qui est d'ailleurs bien expliqu� dans l'article :
Donc vue que la solution ne marche pas avec tout (donc pas portable) elle ne me convient pas pour ce que j'ai � faire.les conversions qui sont effectu�es sont limit�es par les outils install�s sur le syst�me d'ex�cution (c'est � dire par les locales connues). Selon l'OS, le compilateur, etc. , le nombre de locale connues peut �tre relativement r�duit, ce qui risque de poser des probl�mes de conversion dans certains cas.
Mais je la garde dans un coin de toute fa�onmerci
![]()
Euh ... Tu as quelle version de Visual Studio ? Parce que chez moi �a semble aller. Qu'entends-tu par 'ne marche pas' ? Ne compile pas ou ne fait pas la conversion correctement ?
Si vous ne trouvez plus rien, cherchez autre chose...
Vous trouverez ici des tutoriels OpenGL moderne.
Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
Un projet qui ne sert � rien, mais qu'il est joli (des fois) : ProceduralGenerator (G�n�ration proc�durale d'images, et post-processing).
2010, et mon �diteur de texte me dit que ce n'est pas de l'utf-8 qui est �crit dedans.
Tu sais le pur portable, �a n'existe pas trop... les outils modernes de compilation permettent de facilement faire de petites adaptations en fonction du compilateur. Quand tu veux faire du multi-plateforme, il est rare d'y couper.
Typiquement, �a pourrait fonctionner dans Visual avec le bon nom de locale. Il suffirait de faire faire par les outils un #define qui choisi la bonne.
Entre utiliser Qt et faire un petit tout de passe-passe qui choisi la bonne locale en fonction du compilateur, je pr�f�re personnellement cette deuxi�me solution...
Je sais que �a n'existe pas trop c'est pour cette raison que je prend la solution qui s'en rapproche le pluscar au moins je suis sur que peut importe l'OS le comportement sera le m�me.
Partager