Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Bushmeister
22 / 22 / 6
Регистрация: 19.03.2015
Сообщений: 137
#1

UTF8 в C++ или killmepls - C++

03.12.2015, 19:07. Просмотров 225. Ответов 4
Метки нет (Все метки)

Всем привет. Вопрос достаточно простой: какие типы данных поддерживают UTF8 символы в CPP? Сторонние библиотеки не интересуют. char* насколько мне известно, не поддерживает UTF8. Что по поводу wchar_t и std::string?
Логично, что для wchar_t нужны wcin, wcout, но wcout вообще ничего не выводит (как же я ненавижу строки в c++ ...). Может ли std::string хранить utf8 символы? Понятно, что size length будут работать некорректно т.к они считают байты.
Мне необходимо корректно работать с utf8 символами для сохранения(чтения) файлов / закачки страниц из интернета кодированных в utf8 и прочего. Какой простейший способ существует? В C# все было гораздо проще, но возвращаться к .NETу и String^ не хочется, иначе бы сразу писал на шарпе.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2015, 19:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос UTF8 в C++ или killmepls (C++):

UTF8 To Char - C++
Помогите с задачкой! Мне надо сделать программу которая переводит строки из UTF8 в нормальный текст и обратно (норм текст это русские...

Из кодировки * в UTF8 и обратно в * - C++
Добрый вечер. Звездочка(*) это кодировка, которая мне не известна. Суть вот в чем. Есть файл html, который был открыт через...

Перевод из unicode в ansi и utf8 - C++
Подскажите, пожалуйста, как перевести unicode строку в ansi и utf8? Добавлено через 7 часов 32 минуты Никто не знает?:(

Посимвольная обработка UTF8 строки - C++
Добрый день. пишу программу в С++ в Linux Ubuntu, необходимо обрабатывать строку введенную в UTF-8 (русские символы) Есть...

Конвертер из UTF8 - cp1251 и наоборот - C++
Доброго времени суток. Я понимаю, что данная тема уже поднималась на форуме, но я нашел код на c# который конвертит cp1251-utf8: private...

Преобразование String UTF8 в 1251 - C++
Нашел пример: wchar_t s = L"London Москва"; char utf8; wchar_t wstr; char s1251; ...

4
Croessmah
Эксперт CЭксперт С++
13506 / 7664 / 866
Регистрация: 27.09.2012
Сообщений: 18,850
Записей в блоге: 3
Завершенные тесты: 1
03.12.2015, 19:15 #2
Цитата Сообщение от Bushmeister Посмотреть сообщение
Какой простейший способ существует?
Цитата Сообщение от Bushmeister Посмотреть сообщение
char* насколько мне известно, не поддерживает UTF8
char это вообще только байты, так что поддерживает, просто нужно будет писать свою реализацию для UTF-8, например, посмотрите на реализацию ustring из Glib.
Цитата Сообщение от Bushmeister Посмотреть сообщение
Может ли std::string хранить utf8 символы? Понятно, что size length будут работать некорректно т.к они считают байты.
может, но естественно, нужно будет запись/доступ/размер велосипедить.
0
nmcf
5348 / 4668 / 1561
Регистрация: 14.04.2014
Сообщений: 18,582
03.12.2015, 19:26 #3
Файлы utf8 открываются и сохраняются с помощью codecvt и обычных потоков, путём преобразования в wchar_t и назад.
0
Bushmeister
22 / 22 / 6
Регистрация: 19.03.2015
Сообщений: 137
03.12.2015, 21:13  [ТС] #4
Никто толком не ответил про в wchar_t. В итоге, что можно найти нормального для utf8 строк? В чем смысл wchar_t и char, если ни там, ни там нет нормального чтения/записи utf8?
Ну и наконец, почему такой бред творится в C++?

Добавлено через 9 минут
А что по поводу winapi строк? LPCWSTR LPCTSTR TCHAR? Для чего функция Text()?
Правильно ли это? Будет нормально восприниматься utf8? Русские буквы должны записываться нормально? А что по поводу остальных символов utf8?
0
nmcf
5348 / 4668 / 1561
Регистрация: 14.04.2014
Сообщений: 18,582
03.12.2015, 21:34 #5
А ты толком и не спросил. Что делать хочешь? Работать с файлами utf8? Я же сказал - через codecvt, это стандартная возможность. Непосредственно с utf8 работать неудобно, хотя библиотеки такие вроде бы есть, поэтому он преобразуется в wchar_t для обработки.
TCHAR - это такой тип, придуманный в Microsoft, который либо char, либо wchar_t в зависимости от настроек. Но вот что касается универсальности - всё зависит от используемого набора символов. Возьмёшь какой-нибудь экзотический символ и он в старой кодировке не сработает.
В WinAPI не используется utf8, функции на utf16 работают, хотя средства перекодирования туда и обратно имеются.
Короче говоря, схема такая: преобразуешь в wchar_t и работаешь, а сохранить можно перекодировав назад.

Добавлено через 6 минут
Вот открытие файла utf8. Текст сразу преобразуется в wchar_t:
C++
1
2
3
4
std::wifstream ifile(L"data.txt");
ifile.imbue(locale(locale(), new std::codecvt_utf8<wchar_t, 0x10ffffUL, std::codecvt_mode::consume_header>));
std::wstring s;
std::getline(ifile, s);
1
03.12.2015, 21:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2015, 21:34
Привет! Вот еще темы с ответами:

Перекодировка строки из cp1251 в UTF8 - C++
Доброго времени суток. У меня есть строка в cp1251, но мне нужно вывести в utf8. Как это лучше реализовать?

Utf8-Utf16 и назад. КАК? - C++
Задание: реализовать 2 функции, которые заданный файл будут перекодировать из Utf8/Utf16 в Utf8/Utf16. bool UTF8toUTF16 (const char *...

Текст в кодировке cp1251 перевести в utf8 и обратно? - C++
Здорова! Вот есть код: #include &lt;iostream&gt; using std::cout; using std::endl; using std::cerr; using std::cin; #include...

Можно ли читать UTF8 в std::wstring потоком? - C++
Интересует загрузка файла целиком.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru