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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
#1

C++, UTF-8, char - C++

10.02.2014, 21:03. Просмотров 1184. Ответов 3
Метки нет (Все метки)

Приветсвую всех. Правильно ли я рассуждаю:

1) Если мне нужно использовать символы юникода в программе (самые немыслимые иероглифы, кириллицу), то их можно засовывать в строку char* или std::string, только если у меня исходники лежат в UTF-8, a отдельные символы этой строки можно сохранять только в широких переменных (char16_t, char32_t, wchar_t)?

2) То что С++11 стал поддерживает юникод, это значит, что появились фундаментальные типы char16_t char32_t, и они для того, чтобы можно было представлять юникод (в виде '\xFFFFFFFF') в файлах исходного кода, которые НЕ в юникодной кодировке?

Добавлено через 3 часа 10 минут

Не по теме:

Почему на этом форуме никогда не дождешься помощи в вопросах о кодировках? Неужели это что-то сверхъестественное, или никому никогда не надо было писать программы на родных языках? Как зайдет речь о compile-time алгоритмах так все тут как тут

Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2014, 21:03     C++, UTF-8, char
Посмотрите здесь:

Преобразовние Utf-16 <=> Utf-8 C++
C++ Ошибка: initializing argument 2 of `char* fgets(char*, int, FILE*)
C++ Ошибка в cannot convert char * to char вроде поправил теперь выводит ересь(
C++ UTF-8 - русские символы в char посимвольно
Конвертация из ASCII в UTF-32 или UTF-8 в UTF-32 C++
C++ масив Char (Windows-1251, ASCII, UTF-8)
Char *(UTF-8) -> char *(ANSI) C++
C++ Различное поведение функции которая копирует строки с char* t и char t[]
array char* to char* (значения массива указателей в один указатель) C++
Ошибка в работе с файлами: error: incompatible types in assignment of ‘char*’ to ‘char* [255]’ C++
Ошибка: call of overloaded 'strchr(char&, char)' is ambiguous C++
C++ функция возвращает массив слов, содержащихся в текстовом сообщении char* Words(char *s)

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
Эксперт С++
14890 / 6708 / 1059
Регистрация: 02.05.2013
Сообщений: 11,000
Завершенные тесты: 1
10.02.2014, 22:32     C++, UTF-8, char #2
Цитата Сообщение от gromo Посмотреть сообщение
Если мне нужно использовать символы юникода в программе (самые немыслимые иероглифы, кириллицу), то их можно засовывать в строку char* или std::string, только если у меня исходники лежат в UTF-8, a отдельные символы этой строки можно сохранять только в широких переменных (char16_t, char32_t, wchar_t)?
UTF-8 прекрасно хранится в char/string, без каких-либо оговорок.
Только нужно помнить, что, к примеру, string.length будет возвращать
количество байт, а не символов, а это в некоторых случаях важно.

Цитата Сообщение от gromo Посмотреть сообщение
Почему на этом форуме никогда не дождешься помощи в вопросах о кодировках? Неужели это что-то сверхъестественное, или никому никогда не надо было писать программы на родных языках? Как зайдет речь о compile-time алгоритмах так все тут как тут
О, да, после таких выпадов желание что-то писать дальше отпадает напрочь.
gng
626 / 472 / 127
Регистрация: 08.09.2013
Сообщений: 1,219
10.02.2014, 22:33     C++, UTF-8, char #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от gromo Посмотреть сообщение
1) Если мне нужно использовать символы юникода в программе (самые немыслимые иероглифы, кириллицу), то их можно засовывать в строку char* или std::string, только если у меня исходники лежат в UTF-8, a отдельные символы этой строки можно сохранять только в широких переменных (char16_t, char32_t, wchar_t)?
Да. Литералы будут отображаться ожидаемо, если файл исходника имеет соотверствующую кодировку.
Кажды символ utf-8 можно хранить, например, в восьмибайтном целом типе (long long). Символ в utf-8 занимает от 1 до 6 байт. Для русских букв достаточно short (или, если хотите, char16_t, хотя он для этого не предназначен).
Цитата Сообщение от gromo Посмотреть сообщение
2) То что С++11 стал поддерживает юникод, это значит, что появились фундаментальные типы char16_t char32_t, и они для того, чтобы можно было представлять юникод (в виде '\xFFFFFFFF') в файлах исходного кода, которые НЕ в юникодной кодировке?
char16_t и char32_t были введены для символов utf-16 и utf-32.
В виде '\xFFFFFFFF' можно представлять и их, и любые целые значения в файлах (почти) любой кодировки.
gromo
10.02.2014, 22:54  [ТС]     C++, UTF-8, char
  #4

Не по теме:

Цитата Сообщение от Убежденный Посмотреть сообщение
О, да, после таких выпадов желание что-то писать дальше отпадает напрочь.
Извините, нервы не впорядке

Yandex
Объявления
10.02.2014, 22:54     C++, UTF-8, char
Ответ Создать тему
Опции темы

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