utf 8-如何通过C++通过JNI传递扩展ASCII字符

utf 8 - how to pass Extended ASCII characters through JNI via C++

本文关键字:扩展 ASCII 字符 JNI 通过 何通过 C++ utf      更新时间:2023-10-16

我正试图通过VC++使用JNI,并将类路径中的自定义目录作为UTF-8字符串传递-Djava.class.path=c:\myDir\my.jar

这工作得很好,我可以使用FindClass 在jar中找到方法

但当目录名包含任何扩展ASCII字符时,FindClass将返回NoClassDefFound异常。我想这是因为JVM无法加载jar文件,并且我在传递参数时出错了。

这是我的工作1) 创建一个std::wstring jarPath(L"-Djava.class.path=C:\Æ宋体œ\my.jar");2) 使用WideCharToMultiByte将wstring转换为CP_UTF83) 将utf8String复制到optionString并调用JNI_CreateJavaJVM

在调用JNI_CReatJavaJVM之前,我尝试过将转换后的utf8打印到日志文件中,它打印得很完美。

有人能告诉我CP_UTF8(在windows SDK WinN;s.h中定义)是否不是JNI所期望的吗?我该如何调试这个问题,任何帮助都将不胜感激。

提前感谢Rahul

文档建议选项字符串必须为"默认平台编码"。这可能意味着您需要使用CP_ACP。如果你的字符不能用这种编码表示,那么我不确定你能做什么。

(文件的短名称是否可用?)