Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C++ и UTF-8, как чем и почему работать с utf-8 
:(
    Опции темы
jonie
Дата 9.6.2010, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



Собственно вопрос в теме: как наиболее правильно работать с кодировкой UTF-8 в c++ ?
Я вижу простой способ: внутри программы работать с ucs-2 (wchar_t), а при выводе конвертировать... но уж больно неудобно это... хотелось бы некий класс вроде std::string-а под это дело с поддержкой кодировки (да, я знаю что в string можно запихать utf-8, но работать с ним некомфортнее чем с char* буфером).

Я посмотрел ICU - большая, непонятная, поддержки stl stream-ов нету (есть но очень зачаточная форма).
В остальном я НЕ нашел библиотеку, которая походила бы на STL-кую... плохо искал?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
djamshud
Дата 9.6.2010, 23:50 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



QString из QtCore позволяет работать со строками в разных кодировках. А я использую свой класс с блэкджеком и шлюхами.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
jonie
Дата 9.6.2010, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



djamshud, а QString будет работать с STL алгоритамими например? Чет я сомневаюсь... и свой велосипед мне чего-то не очень хочется писать...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
djamshud
Дата 9.6.2010, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



jonie, не в курсе. Там есть совместимость с std::string, но на каком она уровне, я не знаю - не пользуюсь STL.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
cutwater
Дата 10.6.2010, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: 1
Всего: 10



Цитата(jonie @  9.6.2010,  22:52 Найти цитируемый пост)
djamshud, а QString будет работать с STL алгоритамими например? Чет я сомневаюсь... и свой велосипед мне чего-то не очень хочется писать... 


А зачем? QString (как и QtCore ) покрывает функционал STL

Добавлено через 1 минуту и 3 секунды
Цитата(jonie @  9.6.2010,  22:24 Найти цитируемый пост)
хотелось бы некий класс вроде std::string-а под это дело с поддержкой кодировки


std::wstring ? чем не устроил кстати?


--------------------
user posted image
PM MAIL   Вверх
djamshud
Дата 10.6.2010, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



Почитал доку. Совместимость есть. В QString есть STL-style iterator, и:
Цитата

STL-style iterators have been available since the release of Qt 2.0. They are compatible with Qt's and STL's generic algorithms and are optimized for speed.



--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
boostcoder
Дата 10.6.2010, 01:04 (ссылка)  | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(cutwater @  10.6.2010,  00:03 Найти цитируемый пост)
QString (как и QtCore ) покрывает функционал STL

антипаттерн блоб.
PM WWW   Вверх
jonie
Дата 10.6.2010, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



Цитата


std::wstring ? чем не устроил кстати? 
сдается мне что это std::basic_string<wchar_t> , что не совсем utf-8 например в MSVC.

Не, ребят, тащить за собой Qt из-за строк это верх извращенства... слишком большая библиотечка.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
null56
Дата 10.6.2010, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
Alexeis
Дата 10.6.2010, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(jonie @  9.6.2010,  22:24 Найти цитируемый пост)
Я вижу простой способ: внутри программы работать с ucs-2 (wchar_t), а при выводе конвертировать... но уж больно неудобно это... хотелось бы некий класс вроде std::string-а под это дело с поддержкой кодировки

  Мне кажется, что работать с символами UFT8 неэффективно, ведь чтобы узнать расположение n-го символа, нужно знать положение n-1 го. Эффективно будут работать только алгоритмы с перебором от начала. Кроме того нужно всегда хранить две длинны. Длину массива в байтах и длину строки. Скажем как зарезервировать место для 30ти символов? Зарезервировать 30 * 2? 30 * 4 или 30 * 3? Тоже самое с алгоритмами вставки и удаления из середины. 
  ИМХО правильнее всего работать с UTF16 (с точки зрения эффективности).


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
cyan
  Дата 12.6.2010, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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.
Насчет поддержки иероглифов сказать ничего не могу, но кириллица конвертируется бех ошибок.   smile 


Это сообщение отредактировал(а) cyan - 12.6.2010, 21:28
PM MAIL   Вверх
azesmcar
Дата 13.6.2010, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



когда-то задавался похожим вопросом
http://forum.vingrad.ru/forum/topic-249965...tml#st_0_view_0
может поможет.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0648 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.