OVH Cloud OVH Cloud

unicode et stream

1 réponse
Avatar
Amerio
Bonjour,
Je débute avec l'unicode, et j'ai un peu du mal.
J'ai un fichier unicode.txt qui commence comme ca en binaire :
FF FE 54 00 68 00 69 00 73 00 ... : ??T.h.i.s ....

Si j'essaye de le lire ainsi :
std::wifstream fs("unicode.txt");
std::wstring wline;
std::getline(fs, wline);

alors wline contient : (FF),(FE),(54),(00),... en wchar_t
et non pas : L"This"....

Ou est mon erreur ?

1 réponse

Avatar
James Kanze
"Amerio" writes:

|> Je débute avec l'unicode, et j'ai un peu du mal. J'ai un fichier
|> unicode.txt qui commence comme ca en binaire :
|> FF FE 54 00 68 00 69 00 73 00 ... : ??T.h.i.s ....

|> Si j'essaye de le lire ainsi :
|> std::wifstream fs("unicode.txt");
|> std::wstring wline;
|> std::getline(fs, wline);

|> alors wline contient : (FF),(FE),(54),(00),... en wchar_t
|> et non pas : L"This"....

|> Ou est mon erreur ?

Quel est le locale par défaut ? Il faut bien dire à wfstream
l'encodage du fichier qu'il lit. Sous Linux et sous Solaris, il n'existe
pas de locale pour lire Unicode ; on est donc quitte à l'écrire
soi-même. Sous Windows, je m'attendrais en trouver un, étant
donné que Windows utilise Unicode beaucoup dans ces fichiers (où
le monde Unix préfère UTF-8), mais il me semble avoir entendu dire
que le défaut se comportait à peu près comme ce que tu vois.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93