L'encodage UTF-8 ne nécessite pas de caractères "larges" (wide char),
le texte est stocké dans des char* (c'est d'ailleurs pour ça que c'est
l'encodage choisi pour Unicode sous Linux).
Pour sortir un "Bonjour Benoît", il faut que tu entres le codage UTF-8
directement dans ton éditeur :
std::cout << "Bonjour Benoît" << std::endl;
Pour convertir sous Linux, avec iconv :
$ echo "Bonjour Benoît" | iconv -t utf-8 -f iso-8859-1
L'encodage UTF-8 ne nécessite pas de caractères "larges" (wide char),
le texte est stocké dans des char* (c'est d'ailleurs pour ça que c'est
l'encodage choisi pour Unicode sous Linux).
Pour sortir un "Bonjour Benoît", il faut que tu entres le codage UTF-8
directement dans ton éditeur :
std::cout << "Bonjour Benoît" << std::endl;
Pour convertir sous Linux, avec iconv :
$ echo "Bonjour Benoît" | iconv -t utf-8 -f iso-8859-1
L'encodage UTF-8 ne nécessite pas de caractères "larges" (wide char),
le texte est stocké dans des char* (c'est d'ailleurs pour ça que c'est
l'encodage choisi pour Unicode sous Linux).
Pour sortir un "Bonjour Benoît", il faut que tu entres le codage UTF-8
directement dans ton éditeur :
std::cout << "Bonjour Benoît" << std::endl;
Pour convertir sous Linux, avec iconv :
$ echo "Bonjour Benoît" | iconv -t utf-8 -f iso-8859-1
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é
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é
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é
Benoit Dejean wrote in message
news:...je travaille uniquement en UTF-8 (sous GNU/Linux, locale ->
fr_FR.UTF-8)
Sous Linux. Je suppose alors g++ (3.2.x ?).
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.
Excellente reflection. En fait, le problème est plus complex que ça,
et ils entrent en jeu non seulement le ou les locales, mais les fonts
d'affichage, et comment le compilateur (et les autres programmes) les
gèrent.
Il faut dire qu'en ce qui concerne g++, l'internationalisation n'est pas
son fort.
est ce que vous pouvez m'aider ou m'indiquer une lecture traitant de ce
genre de problème de localisation et de portabilité
La seule solution « correcte » et garantie par la norme serait :
std::wcout << L"Benou00EEt" ;
Pour l'instant, la seule solution que j'ai trouvé, c'est de travailler
au bas niveau (<unistd.h>), et de réimplémenter tout moi-même. C'est
un peu triste à dire, mais il faut avouer que la norme ne vaut pas
grand chose pour la portabilité, étant donné que pratiquement tous
les compilateurs l'ignorent allégrement.
À peu près la seule possibilité
d'avoir une implémentation de C++ à peu près conforme sous Linux,
c'est d'acheter le compilateur Comeau ($50), et la bibliothèque
Dinkumware ($135).
La même chose vaut malheureusement pour la plupart des systèmes
aujourd'hui -- c'est le cas au moins pour Solaris, par exemple, et je
crois aussi pour Windows.
Benoit Dejean <bnet@ifrance.com> wrote in message
news:<pan.2003.08.21.20.41.35.184528@ifrance.com>...
je travaille uniquement en UTF-8 (sous GNU/Linux, locale ->
fr_FR.UTF-8)
Sous Linux. Je suppose alors g++ (3.2.x ?).
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.
Excellente reflection. En fait, le problème est plus complex que ça,
et ils entrent en jeu non seulement le ou les locales, mais les fonts
d'affichage, et comment le compilateur (et les autres programmes) les
gèrent.
Il faut dire qu'en ce qui concerne g++, l'internationalisation n'est pas
son fort.
est ce que vous pouvez m'aider ou m'indiquer une lecture traitant de ce
genre de problème de localisation et de portabilité
La seule solution « correcte » et garantie par la norme serait :
std::wcout << L"Benou00EEt" ;
Pour l'instant, la seule solution que j'ai trouvé, c'est de travailler
au bas niveau (<unistd.h>), et de réimplémenter tout moi-même. C'est
un peu triste à dire, mais il faut avouer que la norme ne vaut pas
grand chose pour la portabilité, étant donné que pratiquement tous
les compilateurs l'ignorent allégrement.
À peu près la seule possibilité
d'avoir une implémentation de C++ à peu près conforme sous Linux,
c'est d'acheter le compilateur Comeau ($50), et la bibliothèque
Dinkumware ($135).
La même chose vaut malheureusement pour la plupart des systèmes
aujourd'hui -- c'est le cas au moins pour Solaris, par exemple, et je
crois aussi pour Windows.
Benoit Dejean wrote in message
news:...je travaille uniquement en UTF-8 (sous GNU/Linux, locale ->
fr_FR.UTF-8)
Sous Linux. Je suppose alors g++ (3.2.x ?).
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.
Excellente reflection. En fait, le problème est plus complex que ça,
et ils entrent en jeu non seulement le ou les locales, mais les fonts
d'affichage, et comment le compilateur (et les autres programmes) les
gèrent.
Il faut dire qu'en ce qui concerne g++, l'internationalisation n'est pas
son fort.
est ce que vous pouvez m'aider ou m'indiquer une lecture traitant de ce
genre de problème de localisation et de portabilité
La seule solution « correcte » et garantie par la norme serait :
std::wcout << L"Benou00EEt" ;
Pour l'instant, la seule solution que j'ai trouvé, c'est de travailler
au bas niveau (<unistd.h>), et de réimplémenter tout moi-même. C'est
un peu triste à dire, mais il faut avouer que la norme ne vaut pas
grand chose pour la portabilité, étant donné que pratiquement tous
les compilateurs l'ignorent allégrement.
À peu près la seule possibilité
d'avoir une implémentation de C++ à peu près conforme sous Linux,
c'est d'acheter le compilateur Comeau ($50), et la bibliothèque
Dinkumware ($135).
La même chose vaut malheureusement pour la plupart des systèmes
aujourd'hui -- c'est le cas au moins pour Solaris, par exemple, et je
crois aussi pour Windows.
Benoit Dejean wrote in message
news:...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)
Sous Linux. Je suppose alors g++ (3.2.x ?).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.
Excellente reflection. En fait, le problème est plus complex que ça,
et ils entrent en jeu non seulement le ou les locales, mais les
fonts d'affichage, et comment le compilateur (et les autres
programmes) les gèrent.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
Il faut dire qu'en ce qui concerne g++, l'internationalisation n'est pas
son fort.
compilateurs l'ignorent allégrement. À peu près la seule possibilité
d'avoir une implémentation de C++ à peu près conforme sous Linux, c'est
d'acheter le compilateur Comeau ($50), et la bibliothèque Dinkumware
($135).
Benoit Dejean <bnet@ifrance.com> wrote in message
news:<pan.2003.08.21.20.41.35.184528@ifrance.com>...
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)
Sous Linux. Je suppose alors g++ (3.2.x ?).
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.
Excellente reflection. En fait, le problème est plus complex que ça,
et ils entrent en jeu non seulement le ou les locales, mais les
fonts d'affichage, et comment le compilateur (et les autres
programmes) les gèrent.
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
Il faut dire qu'en ce qui concerne g++, l'internationalisation n'est pas
son fort.
compilateurs l'ignorent allégrement. À peu près la seule possibilité
d'avoir une implémentation de C++ à peu près conforme sous Linux, c'est
d'acheter le compilateur Comeau ($50), et la bibliothèque Dinkumware
($135).
Benoit Dejean wrote in message
news:...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)
Sous Linux. Je suppose alors g++ (3.2.x ?).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.
Excellente reflection. En fait, le problème est plus complex que ça,
et ils entrent en jeu non seulement le ou les locales, mais les
fonts d'affichage, et comment le compilateur (et les autres
programmes) les gèrent.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
Il faut dire qu'en ce qui concerne g++, l'internationalisation n'est pas
son fort.
compilateurs l'ignorent allégrement. À peu près la seule possibilité
d'avoir une implémentation de C++ à peu près conforme sous Linux, c'est
d'acheter le compilateur Comeau ($50), et la bibliothèque Dinkumware
($135).
La seule solution « correcte » et garantie par la norme serait :
std::wcout << L"Benou00EEt" ;
pas facile à écrire
Pour l'instant, la seule solution que j'ai trouvé, c'est de
travailler au bas niveau (<unistd.h>), et de réimplémenter tout
moi-même. C'est un peu triste à dire, mais il faut avouer que la
norme ne vaut pas grand chose pour la portabilité, étant donné que
pratiquement tous les compilateurs l'ignorent allégrement.
je vais me tourner vers la Glib et les Gtk::ustring de Gtkmm. C'est
dommage je pensais que je pourrais résoudre simplement ce problème en
restant standard. Gtk (et gettext en plus) me fourniront sans doute
tout ce qu'il faut.
À peu près la seule possibilité d'avoir une implémentation de C++ à
peu près conforme sous Linux, c'est d'acheter le compilateur Comeau
($50), et la bibliothèque Dinkumware ($135).
Malheureusement, étant étudiant, je suis assez restreint au niveau
financier, mais je garde l'idée.
La même chose vaut malheureusement pour la plupart des systèmes
aujourd'hui -- c'est le cas au moins pour Solaris, par exemple, et
je crois aussi pour Windows.
Ne travaillant pas pas ces systèmes...
Mais si les locale et les w* ne peuvent pas m'aider à quoi servent les
locale et ces w* de la bibliothèque standard, si ce n'est le formatage
numérique?
La seule solution « correcte » et garantie par la norme serait :
std::wcout << L"Benou00EEt" ;
pas facile à écrire
Pour l'instant, la seule solution que j'ai trouvé, c'est de
travailler au bas niveau (<unistd.h>), et de réimplémenter tout
moi-même. C'est un peu triste à dire, mais il faut avouer que la
norme ne vaut pas grand chose pour la portabilité, étant donné que
pratiquement tous les compilateurs l'ignorent allégrement.
je vais me tourner vers la Glib et les Gtk::ustring de Gtkmm. C'est
dommage je pensais que je pourrais résoudre simplement ce problème en
restant standard. Gtk (et gettext en plus) me fourniront sans doute
tout ce qu'il faut.
À peu près la seule possibilité d'avoir une implémentation de C++ à
peu près conforme sous Linux, c'est d'acheter le compilateur Comeau
($50), et la bibliothèque Dinkumware ($135).
Malheureusement, étant étudiant, je suis assez restreint au niveau
financier, mais je garde l'idée.
La même chose vaut malheureusement pour la plupart des systèmes
aujourd'hui -- c'est le cas au moins pour Solaris, par exemple, et
je crois aussi pour Windows.
Ne travaillant pas pas ces systèmes...
Mais si les locale et les w* ne peuvent pas m'aider à quoi servent les
locale et ces w* de la bibliothèque standard, si ce n'est le formatage
numérique?
La seule solution « correcte » et garantie par la norme serait :
std::wcout << L"Benou00EEt" ;
pas facile à écrire
Pour l'instant, la seule solution que j'ai trouvé, c'est de
travailler au bas niveau (<unistd.h>), et de réimplémenter tout
moi-même. C'est un peu triste à dire, mais il faut avouer que la
norme ne vaut pas grand chose pour la portabilité, étant donné que
pratiquement tous les compilateurs l'ignorent allégrement.
je vais me tourner vers la Glib et les Gtk::ustring de Gtkmm. C'est
dommage je pensais que je pourrais résoudre simplement ce problème en
restant standard. Gtk (et gettext en plus) me fourniront sans doute
tout ce qu'il faut.
À peu près la seule possibilité d'avoir une implémentation de C++ à
peu près conforme sous Linux, c'est d'acheter le compilateur Comeau
($50), et la bibliothèque Dinkumware ($135).
Malheureusement, étant étudiant, je suis assez restreint au niveau
financier, mais je garde l'idée.
La même chose vaut malheureusement pour la plupart des systèmes
aujourd'hui -- c'est le cas au moins pour Solaris, par exemple, et
je crois aussi pour Windows.
Ne travaillant pas pas ces systèmes...
Mais si les locale et les w* ne peuvent pas m'aider à quoi servent les
locale et ces w* de la bibliothèque standard, si ce n'est le formatage
numérique?
J'ai joué un peu avec g++ 3.3; et des variantes de:
#include <iostream>
#include <fstream>
#include <locale>
int main() {
std::locale::global(std::locale(""));
try {
std::wcout.imbue(std::locale());
} catch (std::exception& e) {
std::cerr << "std::exception on imbue() " << e.what() << std::endl;
} catch (...) {
std::cerr << "unknown exception on imbue()" << std::endl;
}
std::cerr << "Trying to wcout" << std::endl;
#ifdef USEOE
std::wcout << L"L'u0153uvre de Benou00EEtn" << std::endl;
#else
std::wcout << L"L'oeuvre de Benou00EEtn" << std::endl;
#endif
if (!std::wcout) {
std::cerr << "nwcout failedn" << std::endl;
std::wcout.clear();
std::wcout << std::endl;
}
{
std::cerr << "Trying to /dev/tty" << std::endl;
std::wofstream os("/dev/tty");
os.imbue(std::locale());
#ifdef USEOE
os << L"L'u0153uvre de Benou00EEtn" << std::endl;
#else
os << L"L'oeuvre de Benou00EEtn" << std::endl;
#endif
if (!os) {
std::cerr << "n/dev/tty failedn" << std::endl;
os.clear();
os << std::endl;
}
}
{
std::cerr << "Trying to file" << std::endl;
std::wofstream os("file");
os.imbue(std::locale());
#ifdef USEOE
os << L"L'u0153uvre de Benou00EEtnn" << std::endl;
#else
os << L"L'oeuvre de Benou00EEtn" << std::endl;
#endif
if (!os) {
std::cerr << "nfile failedn" << std::endl;
os.clear();
os << std::endl;
}
}
}
et en les faisant tourner dans des locales C, ISO-8851-1, ISO-8851-15,
UTF8. Le résultat est correct sauf en UTF8.
En UTF8, l'imbue sur wcout n'a pas l'air d'avoir d'effet (presque,
demander wcout.rdbuf()->getloc().name() a l'effet attendu mais la
stream foire sur le premier caractère hors ASCII).
Sur /dev/tty et sur fichier, ça se comporte de manière bizarre: il
manque des caractères (y compris le n) à la fin des lignes qui
comportent des caractères hors ASCII (et apparemment un caractère par
caractère non ASCII). Je n'ai pas ce comportement avec wprintf.
compilateurs l'ignorent allégrement. À peu près la seule possibilité
d'avoir une implémentation de C++ à peu près conforme sous Linux,
c'est d'acheter le compilateur Comeau ($50), et la bibliothèque
Dinkumware ($135).
J'ai pas la bibliothèque de Dinkumware, et la libcomo n'est pas à la
hauteur sur ce point. J'ai même pas des résultats aussi bon qu'avec
gcc.
J'ai joué un peu avec g++ 3.3; et des variantes de:
#include <iostream>
#include <fstream>
#include <locale>
int main() {
std::locale::global(std::locale(""));
try {
std::wcout.imbue(std::locale());
} catch (std::exception& e) {
std::cerr << "std::exception on imbue() " << e.what() << std::endl;
} catch (...) {
std::cerr << "unknown exception on imbue()" << std::endl;
}
std::cerr << "Trying to wcout" << std::endl;
#ifdef USEOE
std::wcout << L"L'u0153uvre de Benou00EEtn" << std::endl;
#else
std::wcout << L"L'oeuvre de Benou00EEtn" << std::endl;
#endif
if (!std::wcout) {
std::cerr << "nwcout failedn" << std::endl;
std::wcout.clear();
std::wcout << std::endl;
}
{
std::cerr << "Trying to /dev/tty" << std::endl;
std::wofstream os("/dev/tty");
os.imbue(std::locale());
#ifdef USEOE
os << L"L'u0153uvre de Benou00EEtn" << std::endl;
#else
os << L"L'oeuvre de Benou00EEtn" << std::endl;
#endif
if (!os) {
std::cerr << "n/dev/tty failedn" << std::endl;
os.clear();
os << std::endl;
}
}
{
std::cerr << "Trying to file" << std::endl;
std::wofstream os("file");
os.imbue(std::locale());
#ifdef USEOE
os << L"L'u0153uvre de Benou00EEtnn" << std::endl;
#else
os << L"L'oeuvre de Benou00EEtn" << std::endl;
#endif
if (!os) {
std::cerr << "nfile failedn" << std::endl;
os.clear();
os << std::endl;
}
}
}
et en les faisant tourner dans des locales C, ISO-8851-1, ISO-8851-15,
UTF8. Le résultat est correct sauf en UTF8.
En UTF8, l'imbue sur wcout n'a pas l'air d'avoir d'effet (presque,
demander wcout.rdbuf()->getloc().name() a l'effet attendu mais la
stream foire sur le premier caractère hors ASCII).
Sur /dev/tty et sur fichier, ça se comporte de manière bizarre: il
manque des caractères (y compris le n) à la fin des lignes qui
comportent des caractères hors ASCII (et apparemment un caractère par
caractère non ASCII). Je n'ai pas ce comportement avec wprintf.
compilateurs l'ignorent allégrement. À peu près la seule possibilité
d'avoir une implémentation de C++ à peu près conforme sous Linux,
c'est d'acheter le compilateur Comeau ($50), et la bibliothèque
Dinkumware ($135).
J'ai pas la bibliothèque de Dinkumware, et la libcomo n'est pas à la
hauteur sur ce point. J'ai même pas des résultats aussi bon qu'avec
gcc.
J'ai joué un peu avec g++ 3.3; et des variantes de:
#include <iostream>
#include <fstream>
#include <locale>
int main() {
std::locale::global(std::locale(""));
try {
std::wcout.imbue(std::locale());
} catch (std::exception& e) {
std::cerr << "std::exception on imbue() " << e.what() << std::endl;
} catch (...) {
std::cerr << "unknown exception on imbue()" << std::endl;
}
std::cerr << "Trying to wcout" << std::endl;
#ifdef USEOE
std::wcout << L"L'u0153uvre de Benou00EEtn" << std::endl;
#else
std::wcout << L"L'oeuvre de Benou00EEtn" << std::endl;
#endif
if (!std::wcout) {
std::cerr << "nwcout failedn" << std::endl;
std::wcout.clear();
std::wcout << std::endl;
}
{
std::cerr << "Trying to /dev/tty" << std::endl;
std::wofstream os("/dev/tty");
os.imbue(std::locale());
#ifdef USEOE
os << L"L'u0153uvre de Benou00EEtn" << std::endl;
#else
os << L"L'oeuvre de Benou00EEtn" << std::endl;
#endif
if (!os) {
std::cerr << "n/dev/tty failedn" << std::endl;
os.clear();
os << std::endl;
}
}
{
std::cerr << "Trying to file" << std::endl;
std::wofstream os("file");
os.imbue(std::locale());
#ifdef USEOE
os << L"L'u0153uvre de Benou00EEtnn" << std::endl;
#else
os << L"L'oeuvre de Benou00EEtn" << std::endl;
#endif
if (!os) {
std::cerr << "nfile failedn" << std::endl;
os.clear();
os << std::endl;
}
}
}
et en les faisant tourner dans des locales C, ISO-8851-1, ISO-8851-15,
UTF8. Le résultat est correct sauf en UTF8.
En UTF8, l'imbue sur wcout n'a pas l'air d'avoir d'effet (presque,
demander wcout.rdbuf()->getloc().name() a l'effet attendu mais la
stream foire sur le premier caractère hors ASCII).
Sur /dev/tty et sur fichier, ça se comporte de manière bizarre: il
manque des caractères (y compris le n) à la fin des lignes qui
comportent des caractères hors ASCII (et apparemment un caractère par
caractère non ASCII). Je n'ai pas ce comportement avec wprintf.
compilateurs l'ignorent allégrement. À peu près la seule possibilité
d'avoir une implémentation de C++ à peu près conforme sous Linux,
c'est d'acheter le compilateur Comeau ($50), et la bibliothèque
Dinkumware ($135).
J'ai pas la bibliothèque de Dinkumware, et la libcomo n'est pas à la
hauteur sur ce point. J'ai même pas des résultats aussi bon qu'avec
gcc.
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).
Benoit Dejean <bnet@ifrance.com> wrote in message
news:<pan.2003.08.25.14.14.20.144121@ifrance.com>...
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).
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).
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?
kanze@gabi-soft.fr 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?
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?
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).
L'avantage, c'est que ça n'utilise que les caractères dans le jeu de
base, que tout compilateur est obligé à supporter.
Et qui ne dépend pas
du locale courant.
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).
L'avantage, c'est que ça n'utilise que les caractères dans le jeu de
base, que tout compilateur est obligé à supporter.
Et qui ne dépend pas
du locale courant.
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).
L'avantage, c'est que ça n'utilise que les caractères dans le jeu de
base, que tout compilateur est obligé à supporter.
Et qui ne dépend pas
du locale courant.
On imagine mal une implémentation choisir de mapper les membres du
'basic character source set' (qui font partie des caractères ASCII)
autrement que par la fonction identité, et c'est donc probablement
une supposition légitime implicitement faite par tout le monde, mais
j'ai l'impression qu'en fait, même ça n'est pas garanti.
On imagine mal une implémentation choisir de mapper les membres du
'basic character source set' (qui font partie des caractères ASCII)
autrement que par la fonction identité, et c'est donc probablement
une supposition légitime implicitement faite par tout le monde, mais
j'ai l'impression qu'en fait, même ça n'est pas garanti.
On imagine mal une implémentation choisir de mapper les membres du
'basic character source set' (qui font partie des caractères ASCII)
autrement que par la fonction identité, et c'est donc probablement
une supposition légitime implicitement faite par tout le monde, mais
j'ai l'impression qu'en fait, même ça n'est pas garanti.