Предположим, что на стороне C++ моя функция принимает переменную типа jstring
с именем myString
. Я могу преобразовать его в строку ANSI следующим образом:Как преобразовать jstring в wchar_t *
const char* ansiString = env->GetStringUTFChars(myString, 0);
есть способ получения
const wchar_t* unicodeString =
...
Вы предлагаете преобразовать jstring в UTF-8, затем обратно в UTF-16? Это действительно необходимо? – Rup 2012-01-05 13:01:32
@Rup jstrings уже являются UTF-8: «JNI использует модифицированные строки UTF-8 для представления различных типов строк. Модифицированные строки UTF-8 такие же, как и те, которые используются виртуальной машиной Java. Модифицированные строки UTF-8 закодированы так, что символьные последовательности, содержащие только ненулевые символы ASCII, могут быть представлены с использованием только одного байта на символ, но все символы Unicode могут быть представлены ..... Виртуальная машина Java не распознает четырехбайтовый формат стандартного UTF-8; вместо этого использует свой собственный двух-трехбайтовый формат ». – 2012-05-23 17:36:27
@ b1naryatr0phy Действительно? jni.h на моей системе (оба 1.6 и 1.7) имеет «typedef unsigned short jchar», который больше похож на UTF-16. – Rup 2012-05-24 00:08:25