1

我有一个 Windows C++ 程序,我想在其中调用 JVM 并能够向它传递一个选项,该选项可能从 C++ 程序的命令行调用中给出(命令行选项可能不是纯文本,例如“ -Dblah=日本日本")。jni.h 中的 JavaVMOption 结构似乎只将选项字符串定义为字符,所以看起来我不能只传递一个宽字符串。

我尝试将其转换为 UTF-8 并将其存储为 C++ 端的窄字符串,然后在 Java 端将其转换回来,但似乎“日本”被实际替换为“??” 字符,因此在转换-取消转换过程中丢失。

我想错了吗?这不会起作用吗?

4

1 回答 1

1

调用api 文档说得很清楚:

typedef struct JavaVMOption {
    char *optionString;  /* the option as a string in the default platform encoding */
    void *extraInfo;
} JavaVMOption;

术语“默认平台编码”是明确的,这并不意味着Windows 上的 utf-8。它表示默认系统代码页使用的编码。如果您的机器未配置为使用日文代码页(如 932),则从 utf-16 字符串进行的转换将为无法转换的日文字符生成问号。这通常不是问题,因为日本用户会选择正确的代码页。没有解决方法有错误的。

确保您选择了正确的系统代码页、控制面板 + 区域和要更改的语言。并使用 WideCharToMultiByte() 和 CP_ACP 进行转换。

于 2012-11-20T01:17:15.247 回答