![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
Собственно вопрос в теме: как наиболее правильно работать с кодировкой UTF-8 в c++ ?
Я вижу простой способ: внутри программы работать с ucs-2 (wchar_t), а при выводе конвертировать... но уж больно неудобно это... хотелось бы некий класс вроде std::string-а под это дело с поддержкой кодировки (да, я знаю что в string можно запихать utf-8, но работать с ним некомфортнее чем с char* буфером). Я посмотрел ICU - большая, непонятная, поддержки stl stream-ов нету (есть но очень зачаточная форма). В остальном я НЕ нашел библиотеку, которая походила бы на STL-кую... плохо искал? -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
QString из QtCore позволяет работать со строками в разных кодировках. А я использую свой класс с блэкджеком и шлюхами.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
djamshud, а QString будет работать с STL алгоритамими например? Чет я сомневаюсь... и свой велосипед мне чего-то не очень хочется писать...
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
jonie, не в курсе. Там есть совместимость с std::string, но на каком она уровне, я не знаю - не пользуюсь STL.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| cutwater |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: 1 Всего: 10 |
А зачем? QString (как и QtCore ) покрывает функционал STL Добавлено через 1 минуту и 3 секунды
std::wstring ? чем не устроил кстати? |
||||
|
|||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
Почитал доку. Совместимость есть. В QString есть STL-style iterator, и:
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
Не, ребят, тащить за собой Qt из-за строк это верх извращенства... слишком большая библиотечка. -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 2 Всего: 12 |
Посмотрите иерархию stl по ветке io и ниже, где - то на уровне stream можно будет задавать локаль, где (вроде бы!!!) входящий поток будет храниться в utf-8.
Ключевое слово imbue http://www.cplusplus.com/reference/iostream/ios/imbue/ Это сообщение отредактировал(а) null56 - 10.6.2010, 09:57 |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
Мне кажется, что работать с символами UFT8 неэффективно, ведь чтобы узнать расположение n-го символа, нужно знать положение n-1 го. Эффективно будут работать только алгоритмы с перебором от начала. Кроме того нужно всегда хранить две длинны. Длину массива в байтах и длину строки. Скажем как зарезервировать место для 30ти символов? Зарезервировать 30 * 2? 30 * 4 или 30 * 3? Тоже самое с алгоритмами вставки и удаления из середины. ИМХО правильнее всего работать с UTF16 (с точки зрения эффективности). -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| cyan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 12.6.2010 Репутация: нет Всего: нет |
Под windows лучше сразу использовать только Unicode. А для перевода из/в UTF8 использовать вот это
http://sourceforge.net/projects/utfcpp/ Примерно так utf8::unchecked::utf16to8 (text.begin (), text.end (), std::back_inserter (dst_text)); Определение длины строки, закодированной в UTF8 size_t text_size = utf8::unchecked::distance (text.begin (), text.end ()); Очень простая библиотека, в стиле STL. Насчет поддержки иероглифов сказать ничего не могу, но кириллица конвертируется бех ошибок. Это сообщение отредактировал(а) cyan - 12.6.2010, 21:28 |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
когда-то задавался похожим вопросом
http://forum.vingrad.ru/forum/topic-249965...tml#st_0_view_0 может поможет. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |