std::locale és toupper

 ( gabor2 | 2012. április 27., péntek - 18:19 )

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ás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

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.

wstring emlékeim szerint a kulcsszó...

>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.

Jogos, koszi.

Esetleg így: http://pastebin.com/DgfeaKbG

Ha UTF-8 output kell:
http://pastebin.com/vmVUXVk6

Ha nem Windows: a legegyszerűbb egy wstring-ről UTF-8 string-re konvertert implementálni (és úgy nem kell használni a glib-et): rövid kód.
--
http://naszta.hu

Linux alatt dolgozom. Az elso ketto nem mukszik. A 3. az jo otlet. Koszi.

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

Egy lehetséges megoldás: http://hup.hu/node/114072

Koszonom, tokeletes. Pont ez kell nekem.