我注意到商标字符™
似乎没有被Java 8中的JNI的GetStringChars()
函数正确地转换,它被认为是翻译Unicode字符的函数。我有与GetStringUTFChars()
方法相同的问题。™字符没有被GetStringChars()正确翻译
这不是一个大问题,因为有简单的解决方法(在调用JNI函数之前从字符串中删除Unicode字符)。
但是,由于我没有发现类似的问题,而谷歌搜索,我来这里看看有没有人有关于此的解释? (或者我可能在我的代码中缺少某些东西?)
我在MinGW下使用Java 8和g ++ 4.8。
这里是我的代码片断:
JNIEXPORT void JNICALL Java_MyClass_JNI_myMethod (JNIEnv * env , jobject obj, jstring input_string)
{
const jchar *inp_string = (*env).GetStringChars(input_string, NULL);
const jchar *jch_inp_string = inp_string;
(*env).ReleaseStringChars(input_string, inp_string);
std::cout << jch_inp_string <<'\n';
}
作为一个例子,在该功能中,如果我输入字符串:
Random String™
它输出该:
Random Stringâ„¢
如果使用'std :: wcout'而不是'std :: cout',你有同样的问题吗? – Michael
std :: wcout对我的编译器来说是未知的,当我编译它时出现这个错误:error:'wout'不是'std'的成员 –
_“错误:'wout'不是'std' “_如果你真的写了'wout'而不是'wcout',那么这个错误是可以预料的。 – Michael