Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Znaki polskie jako 2 znaki std::string

Ostatnio zmodyfikowano 2014-02-17 12:15
Autor Wiadomość
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.
P-104654
xevuel
» 2014-02-15 13:52:16
Użyj std::wstring.
P-104656
matiko101
Temat założony przez niniejszego użytkownika
» 2014-02-15 13:59:04
Nie można inaczej ?;/
Zapodam kawałek kodu:
C/C++
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 );
C/C++
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
P-104657
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
P-104761
« 1 »
  Strona 1 z 1