Как создать строку UTF16 в JNI для Java из C / C ++? - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть строка C / C ++ char *, в которой есть смайлик, но остальная часть содержимого находится в ASCII. Например, Hello World ? .

Когда я пытаюсь создать строку Java в JNI, используя NewStringUTF и NewString , поведение не определено.

Как правильно создать строку Java?

1 Ответ

0 голосов
/ 13 ноября 2019

char *, который я имел, указывал на истинные данные UTF-8 , а не модифицированные данные UTF-8 . Итак, я сначала преобразовал строку в UTF-16, а затем использовал NewString для генерации строки Java. Для преобразования UTF-8 в UTF-16 я использовал эту библиотеку .

string line = myStringWithSmiley;
u16string utf16line = utf8::utf8to16(line);
return env->NewString((const jchar*)(utf16line.c_str()), utf16line.length());
...