![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
proc_maker |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 11.11.2006 Репутация: 1 Всего: 1 |
Здавствуйте эксперты!
Как сделать посимволное чтение в юникодовской строке, т.е. что-то типа const char *strUtf8="........"; for (int i=0; i<strlen(strUtf8); i++) { char c=strUtf8[i]; } но для многобайтной строк в UTF-8? Спасибо! |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
А в чем собственно проблема?
|
|||
|
||||
V.A.KeRneL |
|
|||
![]() Vadim A. Kazantsev ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 3.12.2006 Где: Moscow, Russia Репутация: нет Всего: 14 |
bsa, проблема в Юникоде!
![]() Мне тоже тема интересна. Может кто-то из гуру, например MAKCim, поможет ньюбам... -------------------- «C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы» ---/)/)---(\.../)---(\(\ --(':'=)---(=';'=)---(=':') (")(")..)-(").--.(")-(..(")(") |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
Это сообщение отредактировал(а) MAKCim - 12.2.2007, 10:36 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
V.A.KeRneL |
|
|||
![]() Vadim A. Kazantsev ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 3.12.2006 Где: Moscow, Russia Репутация: нет Всего: 14 |
Ну, что я говорил! Тхеньк ю вери мач, MAKCim.
![]() proc_maker, имхо, тему мона прикрыть, ещё разок от себя поблагодарив отзывчевого эксперта за помощь. -------------------- «C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы» ---/)/)---(\.../)---(\(\ --(':'=)---(=';'=)---(=':') (")(")..)-(").--.(")-(..(")(") |
|||
|
||||
proc_maker |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 11.11.2006 Репутация: 1 Всего: 1 |
А проблема именно в том что strlen(txt) != COUNT_BYTES_IN_LINE потому как каждый символ может кодироваться одним-тремя байтами. Это раз. да и цеплять для такой операции iostream мне не хотелось бы Добавлено @ 12:32
ООО, да. помоему это именно то что надо, если я правильно понимаю, выполнив вместо /* [__utf_array ... __utf_array + index ) содержит то, что надо */ чтото типа char *symbol=new char [bits+1]; bzero(symbol, bits+1); memcpy(symbol, __utf_array, bits); printf("%s\n", symbol); ... я увижу (при str=="строка") с т р о к а Правильно я понял? PS. Огромное спасибо!! Простите что сразу не отреагировал на Ваш ответ, работа... Ееще раз thanks! |
||||||||
|
|||||||||
chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 3 Всего: 44 |
а чем wstring не нравиться?
|
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
proc_maker,
прочитай сначала то, что в ссылке выше -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
proc_maker |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 11.11.2006 Репутация: 1 Всего: 1 |
Что именно? |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
все и потом посмотри принцип преобразования и что лежит в __utf_array Это сообщение отредактировал(а) MAKCim - 16.2.2007, 20:58 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
georain |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Объясните пожалуйста.
Вот я написал:
Что лежит в коде или в памяти программы? Если там лежит строка в формате utf8(или другой Unicode), то каким образом осуществляется переход от старых компиляторов которые ничего об Unicode не знают? Если там не Unicode то как вообще чего происходит? ![]() Как разные компиляторы ведут себя с этим, вроде Unicode даже в стандарте ещё пока нет? Далее, я пишу строку:
Как эта строка выводится на экран физически? Кто реализует функциональность Unicode, библиотеки типа glibc или моя программа? И последний вопрос, я пишу:
Ввожу в консоли: "hello" или "привет", что будет в str (в случае не utf8 и utf8 консоли)? Ничего не понимаю, и не нашёл ничего нормального, а по ссылке выше: "Our servers are on a coffee break." ![]() P.S. И вот ещё вопрос, например хочу ввести utf8 строку, передать её по сети (или пропустить через буфер) и вывести на экран, это всё можно сделать манипулируя только указателями (без преобразований)? Опять же тут вопрос, что лежит в строке. P.S.S. И зачем wstring? Всё на сегодня вопросы все. ![]() Это сообщение отредактировал(а) georain - 1.5.2008, 00:28 |
||||||
|
|||||||
MHz |
|
||||||||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 1.5.2008 Репутация: нет Всего: нет |
ты по-моему совсем запутался... Unicode - кодировка латиницы, русская кирилица вместе с ее буквами НЕ UNICODE. лично у меня русские буквы в UTF-8.
в сегменте кода - выполняющийся код, в памяти много чего лежит но к примеру:
указывает на вершину стека(хотя это можно и на асме реализовать, но теряется кроссплатформенность), но это так, для примера.
я думал старые компиляторы уникод только и знали...
Попробуй сделать так и посмотри что произойдет: #include <unistd.h> int main(int argc, char *argv[]){ write(STDOUT_FILENO, "Hello!\n", 8); return 0; }
в случае utf-8 {'H', 'e', 'l', 'l', 'o', '\n', '\0', 0, 0, 0, 0, 0, ...., 0} или {'П', 'р', 'и', 'в', 'е','т', '\n', '\0', 0, 0, 0, 0, 0, ...., 0}, иначе - зависит от кодировки.
в принципе можно передавать строку от начала до конца, без преобразований, но известив клиента о кодировке строки.
специально для не-Unicode строк. |
||||||||||||||
|
|||||||||||||||
georain |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
||||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 3 Всего: 162 |
Не верно. UTF-8 - один из вариантов юникода, самый распространённый. А вообще википедия рулит. Компиляторы о юникоде не знают ровно ничего в случае не-wchar_t. Если собираешься обрабатывать юникодные строки посимвольно, используй wchar_t. Либо можешь воспользовать QString из QtCore ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |