我正在开发一个应用程序,它读取 XML 文档并将内容与 JNI 一起传递给验证它的 C++-DLL。
对于这个任务,我使用JDom和JUniversalChardet以正确的编码解析 XML 文件。我的 C++ 接受const char*
XML 文件内容的 a 并且需要它在编码“ISO-8895-15”中,否则它会因为格式错误的字符而引发异常。
我的第一种方法是使用 JDom 附带的 OutputFormatter 并告诉它在Charset.forName("ISO-8859-15")
将 JDom 文档格式化为字符串时使用。之后,此 String 中 XML 的标头部分说:
<?xml version="1.0" encoding="ISO-8859-15"?>
问题是它仍然存储在 Java 字符串中,因此如果我做对了,它就会存储在 UTF-16 中。
我的本机方法如下所示:
public native String jniApiCall(String xmlFileContents);
所以我将上面提到的字符串从 JDom 的 OutputFormatter 传递到这个 JNI 方法中。仍然是 UTF-16,对吧?
在 JNI-C++-Method 中,我使用xmlFileContents String
with
const string xmlDataString = env->GetStringUTFChars(xmlFileContents, NULL);
那么,现在我得到了上面提到的 UTF-16 或 UTF-8 字符串?我的下一个问题是:如何将字符编码更改std::string xmlDataString
为 ISO-8859-15?还是我这样做的方式并不优雅?或者有没有办法在 Java 中完全进行字符编码?
谢谢你的帮助!马可