Znaki polskie jako 2 znaki std::string
Ostatnio zmodyfikowano 2014-02-17 12:15
matiko101 Temat założony przez niniejszego użytkownika |
Znaki polskie jako 2 znaki std::string » 2014-02-15 13:42:28 Witam, Mam szybkie pytanie: Gdy liczę ilość znaków w stringu poprzez length() albo size() to wszystkie znaki oprócz polskich są prawidłowo liczone (123 == 3 znaki, ale gdy w tekście jest znak polski to wygląda to tak: ą == 2 znaki ą1 == 3 znaki. Po prostu znak polski liczone jest podwójnie i nie wiem jak temu zaradzić. Chcę by to wyglądało tak: 123ą == 4 znaki, a nie 123ą == 5 znakow. |
|
xevuel |
» 2014-02-15 13:52:16 Użyj std::wstring. |
|
matiko101 Temat założony przez niniejszego użytkownika |
» 2014-02-15 13:59:04 Nie można inaczej ?;/ Zapodam kawałek kodu: button->button_wpisywania = gtk_text_view_new(); button->bufor = gtk_text_view_get_buffer( GTK_TEXT_VIEW( button->button_wpisywania ) ); gtk_text_buffer_get_iter_at_offset( button->bufor, & button->iter, 0 ); gtk_widget_set_size_request( button->button_wpisywania, 400, 200 ); gtk_fixed_put( GTK_FIXED( button->kontener ), button->button_wpisywania, 0, 0 );
int zatwierdzanie( GtkWidget * buttonek, gpointer dane ) { struct Buttony * button = static_cast < struct Buttony *>( dane ); button->dlugosc = 0; button->znaki = 0; gtk_text_buffer_get_start_iter( button->bufor, & button->start ); gtk_text_buffer_get_end_iter( button->bufor, & button->koniec ); button->tekst = gtk_text_buffer_get_text( button->bufor, & button->start, & button->koniec, false ); button->dlugosc = button->tekst.size(); for( int i = 0; i != button->dlugosc; i++ ) { button->znaki++; cout << button->znaki << endl; } }
wstring kłóci się w 3-4 linijkami fragmentu powyżej |
|
Adik80 |
» 2014-02-17 12:15:52 gtk uzywa utf8, wiec zwracany jest std::string, gdzie codepoint dla polskich znakow zajmuje 2 bajty. Jesli chesz zeby jedna litera zajmowala jeden znak to powinienes zwrocony text skonwertowac do ucs2/4 (std::wstring). W C++11 mozesz uzyc codecvt_utf8 |
|
« 1 » |