我打電話JNI方法從Java應用程序與幾個字符串參數。 我正在使用env->GetStringChars(arg1, 0);
來獲取該字符串。 問題是我有時會得到一些額外的特殊字符或字符串被截斷。字符串JNI得到額外的字符
回答
最後,我找到了解決辦法
const jchar* raw = env->GetStringChars(string, NULL);
if (raw == NULL)
return NULL;
wchar_t* wsz = new wchar_t[len+1];
memcpy(wsz, raw, len*2);
wsz[len] = 0;
env->ReleaseStringChars(string, raw);
return wsz;
這在'wchar_t'大於2個字節的平臺上無法正常工作。 –
它在Win Mobile 6上使用。 – marinnn
在Java中,字符是16位的字符(UTF-16編碼)。如果你在C中將它們看作一個普通的char*
,你將會看到nul個字節(它通常被視爲字符串的結尾)或其他特殊字符。
也許你應該使用UTF編碼,這避免NUL字符。你仍然需要處理UTF編碼的特殊字符。
使用JNI函數的'UTF'變體幾乎總是一個壞主意,因爲它們使用的格式實際上不是UTF-8。如果你想以UTF-8字符串的形式獲得Java字符串的內容,你應該得到'jchar'數據並自己轉換它,或者讓Java代碼將字符串編碼成一個UTF-8'byte'數組並訪問代替。 –
- 1. 沒能獲得額外的字符串
- 2. 字符串python中額外的'\'字符
- 3. 額外的字符添加到字符串的開頭?
- 4. JNI字符串和C字符串
- 5. 額外字符
- 6. 額外字符
- 7. PHP代碼將額外的字符添加到JSON字符串
- 8. 的sprintf輸出的額外字符串
- 9. 添加額外的字符串打印
- 10. Bootstrap wysihtml5顯示額外的字符串
- 11. jQuery的字符串+添加額外的字符開始
- 12. 雖然返回字符串,它將額外的斜槓添加到字符串
- 13. 得到字符串
- 14. 在shell腳本中刪除字符串中的額外字符
- 15. 如何從我的字符串中刪除此額外字符?
- 16. 查找兩個字符串之間的額外字符
- 17. 在字符串連接期間添加的額外字符
- 18. JNI字符串損壞
- 19. writeUTF後的額外字符
- 20. 額外的轉義字符
- 21. JNI從C++輸出字符串到java
- 22. 丟失引號或獲得額外的\ sign arround字符串
- 23. 如何刪除額外字符JSON字符串
- 24. Java:將InputStreamReader讀取爲字符串 - 添加額外字符
- 25. 得到字符串後的字符串的具體數字
- 26. 收到的額外字符:Arduino Serial
- 27. ByteArrayOutputStream - 得到的字符串
- 28. 得到的字符串
- 29. 得到的字符串PHP
- 30. 得到的字符串
什麼是 'ENV'?你如何將字符串傳遞給JNI函數?那是什麼其他語言? – bezmax
其他語言是C++ – marinnn