我注意到商標字符™
似乎沒有被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