我正在開發一個應用程序,它讀取XML文檔並將內容與JNI一起傳遞給驗證它的C++ - DLL。如何使用XML,JDom,JNI和C++處理字符編碼
對於此任務,我使用JDom和JUniversalChardet以正確的編碼解析XML文件。我的C++接受const char*
作爲XML文件的內容,並且需要使用編碼「ISO-8895-15」,否則它會因畸形字符引發異常。
我的第一種方法是使用JDom的OutputFormatter,並告訴它在使用JDom文檔格式化爲String時使用Charset.forName("ISO-8859-15")
。之後,此字符串中的XML的頭部分說:
<?xml version="1.0" encoding="ISO-8859-15"?>
的問題是,它仍然存儲在Java String,並因此UTF-16,如果我說對了。
我的本地方法看起來是這樣的:
public native String jniApiCall(String xmlFileContents);
所以我通過上述字符串從JDOM的OutputFormatter到這個JNI的方法。還是一切UTF-16,對不對?
在JNI-C++ - 方法我訪問xmlFileContents String
與
const string xmlDataString = env->GetStringUTFChars(xmlFileContents, NULL);
所以,現在我得到了UTF-16和UTF-8我上面提到的字符串?我的下一個問題是:如何將std::string xmlDataString
的字符編碼更改爲ISO-8859-15?或者我這樣做的方式不完全優雅?或者有沒有辦法在Java中完成字符編碼?
感謝您的幫助! Marco
好吧......而如何轉換我的字節[]到STD:字符串沒有.NET API? – 2011-03-30 15:33:44
只需將'byte []'轉換爲'char *'即可。如上所述,所需的類型是ISO-8859-15編碼中的char *'。所以,你明白了。 – xappymah 2011-03-30 15:45:09