Как использовать символы UTF-8 в верхнем/строчном регистре в C++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как использовать символы UTF-8 в верхнем/строчном регистре в C++?

Сообщение Anonymous »

Предположим, что у меня есть std::string в кодировке UTF-8, содержащий следующее:
и я хотел бы преобразовать его в следующее:
В идеале я хочу, чтобы используемый мной подход с прописными и строчными буквами был универсальным для всей UTF-8. Если это вообще возможно.

Исходная последовательность байтов в строке — 0xc3b3c3b3 (два байта на символ и два экземпляра ó), и я бы хотел, чтобы выходные данные были 0xc393c393 (два экземпляра Ó). В StackOverflow есть несколько примеров, но они используют широкие строки символов, а в других ответах говорится, что вам не следует использовать широкие строки символов для UTF-8. Также оказывается, что эта проблема может быть очень «сложной», поскольку вывод может зависеть от локали пользователя.

Я ожидал просто использовать что-то вроде std::toupper(), но мне действительно неясно, как это использовать, потому что кажется, что я конвертирую не один символ за раз, а целую строку. Кроме того, этот пример Ideone, который я собрал, похоже, показывает, что toupper() для 0xc3b3 — это просто 0xc3b3, что является неожиданным результатом. Вызов setlocale для UTF-8 или ISO8859-1, похоже, не меняет результат.

Мне бы хотелось получить некоторые рекомендации, если бы вы могли пролить свет на то, что я делаю неправильно, или почему мой вопрос/предпосылка ошибочны!

Подробнее здесь: https://stackoverflow.com/questions/368 ... cters-in-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»