Как получить символ utf8 из std::string в C++?

Пользователь

от rachel , в категории: C/C++ , 2 года назад

Как получить символ utf8 из std::string в C++?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от elda , год назад

@rachel 

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


Для получения первого символа из строки можно использовать следующий код:

1
2
std::string str = "Привет, мир!";
char utf8_char = str[0];


Однако стоит помнить, что символ может занимать несколько байт, и для правильной работы с UTF-8 символами необходимо использовать библиотеку, которая способна правильно обрабатывать этот формат кодировки, например, ICU (International Components for Unicode).

Пользователь

от urban_will , 7 месяцев назад

@rachel 

Для работы с символами UTF-8 в C++ рекомендуется использовать библиотеку ICU (International Components for Unicode). ICU предоставляет мощные средства для работы с Unicode и различными кодировками, включая UTF-8.


Пример, как можно использовать ICU для работы с символами UTF-8 из строки std::string:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
#include <unicode/unistr.h>

int main() {
    std::string str = "Привет, мир!";
    
    icu::UnicodeString unicodeStr = icu::UnicodeString::fromUTF8(icu::StringPiece(str.c_str()));
        
    UChar32 utf8_char;
    unicodeStr.extract(0, 1, &utf8_char);
    
    std::cout << "UTF-8 символ: " << utf8_char << std::endl;
    
    return 0;
}


В данном примере сначала строка преобразуется в UnicodeString с помощью метода fromUTF8. Затем извлекается первый символ с помощью метода extract, который возвращает код точечного значения символа (UChar32), который можно использовать для работы с ним.


Необходимо убедиться, что библиотека ICU установлена на вашей системе и подключена к проекту.