Rozmiar tekstu zakodowanego w ASCII/UTF8

0

Mam plik tekstowy - *.txt, jest to po prostu jakiś ebook w formacie *.txt -> duuużo znaków ;). Muszę teraz zrobić coś takiego : obliczyć rozmiar tego tekstu zakodowanego w ASCII oraz rozmiar tekstu zakodowanego w UTF8. Nie bardzo wiem, jak się za o zabrać ... myślałem o tym, aby czytać plik po znaku (char - to już mam), ale co z tym kodowaniem? Przykładowy pseudokod:

char c -> wczytany z pliku znak,
znakWASCII -> zakodowany w ASCII znak wczytany z pliku
znakWUTF8 -> zakodowany w UTF8 znak wczytany z pliku
rozmiarASCII += znakWASCII.rozmiar();
rozmiarUTF8 += znakWUTF8.rozmiar();

i powtarzać tak dla każdego znaku z pliku ... czy dobrze myślę? Używam Qt/C++, jak wyglądałoby to tam? Mógłby ktoś podać przykład (dla dowolnego znaku), zamiany jego na ASCII/UTF8 i pobranie rozmiaru? Z resztą sobie poradzę, tylko proszę o pomoc w starcie :)

Ok, wykombinowałem coś takiego (muszę czytać charami, nie mam niestety możliwości inaczej, jest to narzucone przez zadanie):

Kod:

ifstream plik("ebook.txt");
char c;
long rozmiar_w_ascii;

while(plik)
{
  QString tmp = "";
  tmp += c;
  QByteArray tablicaBajtow = QString(c).toUtf8();
  rozmiar_w_ascii += tablicaBajtow.size();
  tmp = "";
}

I kompiluje się, fakt, tylko nie wiem, czy to jest poprawne i czy rzeczywiście osiągnę w ten sposób to, co chciałem (aaa, i ifstreamów/ofstreamów muszę używać ;/). Mógłby ktoś to zweryfikować?

0

Masz tylko obliczyć wielkość tekstu, czy to fragment czegoś większego?

0

Jest to kawałek większego projektu :) Muszę jeszcze policzyć spółgłoski/samogłoski w tekście, białe znaki, obliczyć rozmiar tekstu zakodowanego w ASCII oraz UTF8, no i podać różnicę w rozmiarach UTF8-ASCII + ile bitów potrzeba na znak. Bawiłem się jeszcze chwilę, i mam coś takiego:

char buf[100];
    QByteArray content;
    ifstream file(fileInName.c_str());
    while (!file.eof()) {
        file.read(buf, 100);
        content.append(buf);
    }

    QTextCodec *codec1 = QTextCodec::codecForName("UTF8");
    QString string1 = codec1->toUnicode(content);

    //QTextCodec *codec2= QTextCodec::codecForName("ASCII");
    //QString string2 = codec2->toUnicode(content);

    qDebug() << string1.length();

    file.close();

I rzeczywiście, wyświetla mi jakąś liczbę - mam rozumieć, że to jest właśnie rozmiar tekstu zakodowanego w UTF8? Bo jeśli tak, to ok :) Ale kiedy wpiszę ASCII - ten drugi, zakomentowany sposób, - program wywala się, i pisze,ze przestał działać. Jak to poprawić?

Jeszcze jedno : czy różnica w rozmiarach UTF8-ASCII to będzie po prostu rozmiar UTF8 - rozmiar ASCII? :)

0

Jeszcze jedno : czy różnica w rozmiarach UTF8-ASCII to będzie po prostu rozmiar UTF8 - rozmiar ASCII?

Nie rozumiem.

Jeśli tekst mieści się w zakresie podstawowego ASCII, np. „ala ma kota” to rozmiar ASCII i UTF8 będzie taki sam – zresztą i stringi będą dokładnie takie same. Ale rozmiar „zażółć gęślą jaźń” będzie różny, bo w UTF-8 polskim literom przypadają dwa bajty.
Jak masz policzyć „różnicę w rozmiarach”, to chyba jasne, trzeba odjąć jedną liczbę od drugiej.

0

http://en.wikipedia.org/wiki/UTF-8
zanim wczytasz znak musisz sprawdzic czy jest on poprawny.

0

No ok. Ale jak za pomocą Qt zakodować tekst do UTF8 i ASCII ? Żeby otrzymać rozmiar tego danego tekstu w UTF8 i ASCII właśnie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1