OVH Cloud OVH Cloud

problème avec internationalisation, utf8, wchar_t

13 réponses
Avatar
Benoit Dejean
je m'appelle Benoît avec un i circonflexe et je me suis dit que ça
serait bien la mort si je n'arrivais pas à faire un programme qui fasse
"Bonjour Benoît"

je travaille uniquement en UTF-8 (sous GNU/Linux, locale -> fr_FR.UTF-8)

si mon source est en UTF-8

cout << "Benoît";

fonctionne très bien, seulement, je ne pense pas que ça soit très bien,
si les locales de l'utilisateur sont différents. alors je lis vite et mal
quelque chose sur les wchar_t et tente

wcout << "Benoît";

qui provoque un affichage défectueux (le i est absent -> "Benot"

j'essaye

wcout << L"Benoît";

qui mets en l'air mon wcout (fail) et qui affiche jusqu'à l'erreur "Beno"
puis !wcout


est ce que vous pouvez m'aider ou m'indiquer une lecture traitant de ce
genre de problème de localisation et de portabilité

3 réponses

1 2
Avatar
kanze
Jean-Marc Bourguet wrote in message
news:...
writes:

Benoit Dejean wrote in message
news:...

La seule solution « correcte » et garantie par la norme serait :

std::wcout << L"Benou00EEt" ;


pas facile à écrire


Oui et non. Si tu as un clavier américain, il se peut que ce soit
plus facile à écrire que L"Benoît" (mais ça dépend de l'éditeur).


recode utf8..java


Tu pourrais expliquer, parce que je ne comprends pas ton commentaire.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16




Avatar
Jean-Marc Bourguet
writes:

Jean-Marc Bourguet wrote in message
news:...
writes:

Benoit Dejean wrote in message
news:...

La seule solution « correcte » et garantie par la norme serait :

std::wcout << L"Benou00EEt" ;


pas facile à écrire


Oui et non. Si tu as un clavier américain, il se peut que ce soit
plus facile à écrire que L"Benoît" (mais ça dépend de l'éditeur).


recode utf8..java


Tu pourrais expliquer, parce que je ne comprends pas ton commentaire.


Normal, ce n'aurait pas dû être en réponse à ton message mais à celui
auquel tu répondais.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org





Avatar
kanze
Jean-Marc Bourguet wrote in message
news:...
writes:

(Je suppose que les 8851 sont des typos pour 8859. ISO 8851 concerne
la beurre : détermination de la quantité d'eau, de graisse, etc.)


Exact (du moins sur la typo, j'ai pas été vérifier ce que concernait
ISO 8851).

Avec USEOE définie, je suppose. Sinon, il n'y a aucune différence
entre 8859-1 et 8859-15 dans ton exemple. Et les deux revient à
simplement faire tout de façon naïve, ce qu'a toujours fait g++ dans
la passée.

Et quand tu parles de « résultat correct », ça veut dire quoi quand
tu sors u0153 en locale C, ou u00EE en locale C ou en locale
ISO-8859-1.


fail() retourne true. Tu t'attendais à quoi?


À vrai dire, je ne savais pas. J'ai vérifié, et effectivement, d'après
la norme, l'implémentation doit positionner badbit dans ce cas. C'est
curieux, parce que dans d'autres cas (§2.13.2, par exemple : « A
universal-character-name is translated to the encoding, in the execution
character set, of the character named. If there is no such encoding,
the universal-character-name is translated to an implementation defined
character. »

Ce ne m'est toujours pas trop clair ce qui doit se passer avec 'u0153'
quand l'encodage à l'execution est UTF-8.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16


1 2