» »

[C++] Unicode, Utf...

[C++] Unicode, Utf...

zhigatsey ::

Živjo,

Bi vprašal malo o unicode in utf zadavah, ker sem na tem področju bolj mrzel...

Imam razred StringList, v katerega lahko shranjujemo podatke tipa std::string.
Ima tudi proceduro loadFromFile(), s katero lahko v string list naložimo poljubno
tekstovno datoteko...

void StringList::loadFromFile(const string& fileName)
{
    clear();
    ifstream in(fileName.c_str());
    if (in.is_open())
    {
        while (!in.eof())
        {
            string str;
            std::getline(in, str);
            add(str);
        }
        in.close();
    }
    changed();
}


Samo kaj pa če je datoteka recimo v unicode oz. utf8, 16 itd.. Recimo ena stvar je da naredim ifdef UNICODE in zamenjam
string z wstring, fstream z wifstream itd... Torej imam dve možnosti prevesti program kot unicode ali ansi....
Če bi uporabljal unicode verzijo programa ali bi lahko bral ansi tekstovne datoteke, ali bi lahko bral samo unicode datoteke...
Kaj bi se zgodilo če bi uporabljal unicode verzijo programa in bi na začetku klical setlocale(LC_ALL, "sl_SI"); ?
Samo tudi če uporabljaš unicode verzijo StringLista, še vedno ne moreš brati recimo UTF8, UTF16 tekstovnih datotek....
Torej če bi hotel pravilno brati Utf8,16 datoteke bi moral najprej pretvoriti iz utf v unicode. Samo kako ugotoviti
za kakšen encoding datoteke gre?

Pa še eno vprašanje... Ali za kitajce ali japonce, ki imajo toliko veliko znakov sploh pride v poštev std::string oz char, ali
morajo vedno uporabljati wstring oz wchar.

Hvala za odgovore

BigWhale ::

Najlazje ugotovis kak encoding je tako, da vprasas uporabnika. ;)

Vesoljc ::

go unicode all the way, tele 8bitne code tabele so cist mimo... memmory usage gre sicer rahlo gor, ampak to je dons ze skor zanemarljivo...
dobis pa velik vec.
zdele sicer ne vem cist na pamet ampak milsim da ma ibm eno knjiznjico za tekst, ki zna precej velik (pretvarjanje formatov, ipd...). pa se portable naj bi bla...
Abnormal behavior of abnormal brain makes me normal...

BigWhale ::

ICU se ji rece.

Jaz je nemaram.... Mogoce zato, ker cele dneve z njo delam ;)

Vesoljc ::

hehe, no vidis :P
Abnormal behavior of abnormal brain makes me normal...

Gundolf ::

Sej lahko v istem programu bereš z fstream in wfstream. In z obema verzijama bereš ali v string ali wstring (se mi zdi da direkt, če pa slučajno ne, lahko pa vedno string <-> wstring narediš s priloženimi funkcijami). Se pravi string izbereš tako, da ti spremenljivke v programu ustrezajo, fstream pa izbereš glede na to, kako imaš zapisane datoteke.

Drugače pa z običajnimi verzijami razredov lahko delaš z UTF-8, z wide verzijami paglej spodaj). Branje, pisanje, storage ni noben problem, težave nastanejo, ko želiš te stringe kje prikazati.

Type wchar_t is a distinct type whose values can
represent distinct codes for all members of the largest
extended character set specified among the supported
locales (lib.locale). Type wchar_t shall have the same
size, signedness, and alignment requirements
(basic.types) as one of the other integral types, called
its underlying type.

Matako ::

UTF-8 je dokaj fajn, praktično tudi za predelavo programov na UNICODE, ker je kompatibilen za nazaj z ASCII. Dosti hinavskih napak z UTF nastane v zvezi s strlen() - to je funkcija, ki se jo dostikrat uporablja za štetje znakov, vendar to z UTF-8 na splošno ne bo letelo! Shranjevanje in alokacija kot je bilo že omenjeno ni tak problem, ker tam se ti dejansko gre za število bytov ...
/\/\.K.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Unicode 8.0.0 prinaša več kot sedem tisoč novih znakov

Oddelek: Novice / Ostala programska oprema
3834323 (28802) johnnyyy
»

[C++] charset-a

Oddelek: Programiranje
7817 (674) SasoS
»

[C++] Slovenski znaki v Command Promptu

Oddelek: Programiranje
133233 (2937) Makronaut
»

Encoding

Oddelek: Izdelava spletišč
81390 (1270) gerrno
»

Unicode

Oddelek: Programiranje
81235 (1126) Vesoljc

Več podobnih tem