Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

Unicode w C++

#1
Unicode w C++
Wymyśliłem sobie aby w swoich programach obsługiwać Unicode. Niestety standardowe mechanizmy języka są ...eee niewystarczające. Szukam jakiejś przenośnej biblioteki która pozwoli mi łatwo obsługiwać teksty w różnych językach oraz wczytywać pliki ASCII/UTF-8/UTF-16/z BOM/bez BOM, konwertować pomiędzy ASCII z charstetem <-> Unicode i to wszystko jak najprościej w użyciu. Fajnie gdyby dodatkowo wspierała lokalizacje i formatowanie łańcuchów.

Na razie próbowałem z ICU ale nie mogę przebrnąć przez wczytywanie plików.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#2
RE: Unicode w C++
Z tego co przeczytałem w internecie to ICU jest chyba najbardziej sensowne, ale co masz na myśli pisząc, że nie możesz przebrnąć przez wczytywanie plików?
Z całego serca życzę Wam działających PeCetów Krzywy
[Obrazek: wqdz690429546a.GIF]Piszę poprawnie po polsku.
LUDZIE!!! Nie denerwujcie mnie argumentacją "nie kupię, bo mi kiedyś padło"
Rejestruj się, klikaj i zarabiaj!
 System operacyjny: windows_seven Przeglądarka: firefox
#3
RE: Unicode w C++
Udało mi się wreszcie.
Kod:
UChar buffer[512];
UFILE* file = u_fopen_48("uni.txt", "r", NULL, "UTF-16");
unsigned read = u_file_read_48(buffer, 512, file);
buffer[read] = '\0';
u_fclose_48(file);
MessageBoxW(0,buffer,0,0);

Teraz mam inny problem - czy można sprawdzić ile znaków będzie miał dany plik tak aby wczytać cały plik? Na razie wymyśliłem tylko żeby wczytać powiedzmy 256 znaków, sprawdzić czy mamy koniec pliku, jeżeli nie to wczytać następne 256 i dokleić do poprzednich i tak w kółko aż zostanie osiągnięty koniec pliku.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#4
RE: Unicode w C++
Uhm, nie jestem pewien czy o to chodzi, ale:
plik.seekg (0, ios::end);
int length = plik.tellg();

To zwróci jaka jest wielkość pliku(ilość znaków). Podkreślam że jestem pewien czy o to chodziło.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#5
RE: Unicode w C++
Unicode zapisuje się na dwóch bajtach, zatem (prawdopodobnie) wystarczy rozmiar podzielić przez 2.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#6
RE: Unicode w C++
(19.06.2011, 13:11)Szachista napisał(a): Unicode zapisuje się na dwóch bajtach, zatem (prawdopodobnie) wystarczy rozmiar podzielić przez 2.

Niekoniecznie, przykładowo plik z taką treścią:
Kod:
Zażółć gęślą jaźń
pchnąć w tę łódź jeża lub ośm skrzyń fig
Whisky bueno: ¡excitad mi frágil pequeña vejez!
Victor jagt zwölf Boxkämpfer quer über den Sylter Deich
Ma 189 znaków a po zapisaniu w UTF-8 BOM ma rozmiar 192 bajtów, w UTF-16 ma 332 bajty.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#7
RE: Unicode w C++
(19.06.2011, 12:22)Darekg11 napisał(a): Uhm, nie jestem pewien czy o to chodzi, ale:
plik.seekg (0, ios::end);
int length = plik.tellg();

To zwróci jaka jest wielkość pliku(ilość znaków). Podkreślam że jestem pewien czy o to chodziło.

Tak to o to chodzi.
I wydaje mi się, że jeśli zapisujesz w unicode to jednak KAŻDY znak ma 2 bajty więc powinno się zgadzać, bo kodowanie tyczy się wszystkich znaków jak już.
Z całego serca życzę Wam działających PeCetów Krzywy
[Obrazek: wqdz690429546a.GIF]Piszę poprawnie po polsku.
LUDZIE!!! Nie denerwujcie mnie argumentacją "nie kupię, bo mi kiedyś padło"
Rejestruj się, klikaj i zarabiaj!
 System operacyjny: windows_seven Przeglądarka: firefox
#8
RE: Unicode w C++
Nie, za Wikipedią:
Cytat:Dla pierwszych znaków z przedziału ASCII od 0 do 127 (czyli dla np j.ang) znak jest mapowany jako jeden bajt. Dla znaków powyżej (np. polskie znaki) jest mapowany jako dwa bajty (lub więcej).

Zrobiłem tak jak zamierzałem i działa OK.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
Programy: Polecane / Nowe / Inne



Użytkownicy forum szukali:
"unicode c++"unicode c++c++ unicodeunicode w cunicode w c++znaki unicode c++

Podobne wątki (Unicode w C++)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Biblioteki SFML, problem z Unicode Sino4 0 1573 26.09.2012, 18:31
Ostatni post: Sino4
  [C++] Jak zmienić kodowanie na UNICODE? kikiw 5 4025 19.01.2010, 19:48
Ostatni post: Szachista

Skocz do:


Wybrane wątki (Unicode w C++)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Python z wiersza poleceń Physicist 15 6993 21.08.2019 20:14
Ostatni post: Physicist
  Transfer plików via FTP Visual Basic FireBytes 3 4355 15.08.2019 07:41
Ostatni post: Szachista
  Menu wysuwane z boku patryk67 1 2066 07.08.2019 12:43
Ostatni post: aht
  Visual Basic Excel l.całkowitą przedstawić w postaci szesnastkowej fugaz 4 3570 18.06.2019 21:36
Ostatni post: fugaz
  Nauka do Olimpiady Informatycznej? piotr0905 1 3656 08.06.2019 16:50
Ostatni post: wlisik
Ściana Prosta gra w Builder C++ Kiranek1 1 3547 31.05.2019 15:20
Ostatni post: Szachista
  Menu (Nie widoczne długie opisy) wanhelsing 5 5197 28.04.2019 19:31
Ostatni post: koneton
  Skrypt usuwający pliki sylwiaa1 2 2276 28.04.2019 15:20
Ostatni post: sylwiaa1
  Środowisko do assemblera Physicist 4 4889 21.04.2019 14:04
Ostatni post: Ajgor
  VBA excel dmjs 6 5136 17.04.2019 10:20
Ostatni post: ptrick
  C++ - sens pogłębiania nauki gbr 5 5619 25.03.2019 12:53
Ostatni post: koneton
  Klasa wewnętrzna w C++ Physicist 4 5430 23.03.2019 18:28
Ostatni post: Physicist
  Ruby on Rails - tutoriale luciussulla 0 4749 23.03.2019 16:49
Ostatni post: luciussulla
Big Grin Czy dostane sie technikum informatycznego klaudiusz20046 6 7535 21.03.2019 01:28
Ostatni post: UnableToSee
  [C#] Program do moderacji czatów gier wiktrom12 0 5265 07.03.2019 15:33
Ostatni post: wiktrom12