nixp.ru v3.0

18 октября 2017,
среда,
12:26:48 MSK

DevOps с компанией «Флант»
Аватар пользователя Steck
Steck написал 10 мая 2006 года в 18:32 (379 просмотров) Ведет себя как мужчина; открыл 124 темы в форуме, оставил 549 комментариев на сайте.

Народ столкнулся с такой проблемой

len = strlen(str)
и
len = gtk_text_buffer_get_char_count((GtkTextBuffer *)buff);

Дают разную длинну строки…

Вобщем вопросик как узнать длинну строки в UTF8?

P.S К примеру первая запись дает результат 102 символа а вторая 55 (что верно сам считал при вводе :-) )

Code Monkey

UTF-8 двубайтная кодировка…

хотя странно, что 102 а не 110…

Genie
UTF-8 двубайтная кодировка…

хотя странно, что 102 а не 110…

чего куримши?

UTF-8 — многобайтная кодировка. с USC-2, (Что-то вроде UTF-16) не спутал? :)

P.S К примеру первая запись дает результат 102 символа а вторая 55 (что верно сам считал при вводе :-) )

иди читай про UTF-8.

вкратце: цифры и английские буквы кодируются одним символом.

русские — двумя символами.

японские иероглифы — тремя.

что-то может и 4мя…

жаль, нельзя продемонстрировать — форум в cp1251 и потеряет другие символы

rgo

utf не двух байтная. разные символы кодируются разным числом байт. вся кириллица, например, по два байта, а ascii символы — они по одному.

попробуй сказать так:

$ echo "hello мир" | iconv -f koi8-r -t utf-8

в koi8-r терминале.

myst

Кодируется по кол-ву старших единичных бит в 1-ом байте. Если 0xxxxxxx, то 1 байт 0..127, 10xxxxxx xxxxxxxx — 128 до 128+16384, и так далее…

Code Monkey

/me посмотрел на это все и ушел курить man’ы