std::locale és toupper

Fórumok

Sziasztok !

A kovetkezo programot szeretnem mukodesre birni.

http://pastebin.com/9M2TR77u

Az eredmeny :


$ ./a.out
User locale: fr_FR.utf8
àäâéèêëïîöôüû
àäâéèêëïîöôüû


$ locale -a | grep fr
fr_FR.utf8


$ file ./source.cpp
.source.cpp: UTF-8 Unicode C program text

Hol lehet a hiba?

Koszi!

Hozzászólások

Meg meg info :

gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)

DISTRIB_DESCRIPTION="Ubuntu 10.04.4 LTS"

A string osztály mit sem tud arról hogy UTF-8 a kódolásod, ezért az iterátoros megoldás erős gyanúm szerint byte-onként adagolja az értéket a toupper()-nek, amelynek ezáltal egyértelműen esélye sincs jól működni. Egyrészt asszem toupper helyett towupper kéne, másrészt mindenképp teljes Unicode karaktereket kell neki adni, nem pedig byte-okat egyenként az UTF-8 reprezentáció szerint. Sajna nem vagyok annyira penge hogy fejből vágjam hogy van-e olyan UTF-8 string osztály amelyen iterálva karaktereket kapsz és nem byte-okat, avagy egész sztringet végig átalakító toupper-variánst, de ha keresel biztos találsz valamit.

Az első ténylegesen wchar_t-t küld a kimenetre. Ez általában UTF-16, de például Mac-en UTF-32. A második Linux alatt nem működik, hisz az encoder Windows-os. Azonban a 3-ik használható arra, hogy a wchar_t alapú wstring-ből UTF-8-as string-et készítsen. Ettől a toupper-t én továbbra is wstring-en használnám.
--
http://naszta.hu