I думаю вы хотите передать строку, используя std :: string в кодировке UTF-8, и обрабатывать ее по одному символу за раз, каждый раз преобразуя один символ в строку широких символов длины1, чтобы вы могли передать его TTF_SizeUNICODE
, а TTF_RenderUNICODE_Blended
.
. Я продемонстрирую соответствующий код преобразования строки.
Вот функция test
, которая ожидает нулевое значение.завершенная строка широких символов, содержащая только один символ.Тело main
показывает, как преобразовать строку UTF-8 в UTF-16 (используя codecvt_utf8_utf16
) и как преобразовать один символ в строку (используя std::wstring(1, ch)
)
#include <string>
#include <codecvt>
#include <iostream>
void test(const wchar_t* str) {
std::cout << "Number of characters in string: " << wcslen(str) << std::endl;
for (const wchar_t* ch = str; *ch; ++ch) {
std::cout << ((int)*ch) << std::endl;
}
}
int main() {
std::string input = u8"тлор";
for (wchar_t ch : std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t>().from_bytes(input)) {
std::wstring string_with_just_one_character(1, ch);
test(string_with_just_one_character.c_str());
}
return 0;
}