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

标签 c++ utf-8 java-native-interface extended-ascii

我正在尝试通过 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_UTF8 3) 将 utf8String 复制到 optionString 并调用 JNI_CreateJavaJVM

我已经尝试在调用 JNI_CReateJavaJVM 之前将转换后的 utf8 打印到日志文件中,并且打印完美。

有人可以告诉我 CP_UTF8(在 Windows SDK WinN;s.h 中定义)是否不是 JNI 所期望的吗? 我该如何调试这个问题,非常感谢任何帮助。

提前致谢 拉胡尔

最佳答案

documentation建议选项字符串必须采用“默认平台编码”。这可能意味着您需要使用 CP_ACP。如果您的字符无法用该编码表示,那么我不确定您能做些什么。

(可以使用文件的简称吗?)

关于c++ - 如何通过 C++ 通过 JNI 传递扩展 ASCII 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6372342/

相关文章:

c++ - 静态方法类实例化

mysql - 为什么远程服务器mysql命令行无法输入汉字而本地却可以

c - Linux 中的 printf()/fprintf() 问题,UTF-8 编码

c++ - 在头文件中使用私有(private)命名空间中的声明

c++ - 菜单选择器不接受有效输入

java - Exception_Access_Violation - 外部设备 API - JNI

java - JNI异常: jarray is an invalid global reference

java - 在 Objective-C Mac 应用程序中使用 Java 库,并将该应用程序放到 Mac App Store

c++ - 将临时对象附加到对 const 的引用时出错

c++ - 使用 C/C++ 通过管道向/从 Powershell 设置 UTF-8 输入和获取 UTF-8 输出