utf 8 — Можно ли передавать опции UTF-8 / UTF-16 в JVM, вызываемую из C ++?

У меня есть программа для Windows C ++, в которой я хочу вызвать JVM и иметь возможность передать ей параметр, который может быть задан из вызова командной строки программы C ++ (например, параметр командной строки не может быть простым текстом) -Dblah = япония 日本 «). Кажется, что структура JavaVMOption в jni.h определяет строку параметров только как символы, так что, похоже, я не могу просто передать ей широкую строку.

Я попытался преобразовать его в UTF-8 и сохранить в виде узкой строки на стороне C ++, а затем на стороне Java, чтобы преобразовать его обратно, но кажется, что «日本» заменяется фактическим «??» символы, и, таким образом, теряются в процессе преобразования-преобразования.

Я думаю об этом неправильно? Разве это не должно сработать?

1

Решение

Вызов API документация дает понять:

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

Термин «кодировка платформы по умолчанию» является однозначным, что делает не имею ввиду utf-8 на винде. Это означает кодировку, используемую системной кодовой страницей по умолчанию. Если ваш компьютер не настроен на использование японской кодовой страницы (например, 932), то преобразование из строки utf-16 приведет к появлению вопросительных знаков для японских символов, которые невозможно преобразовать. Обычно это не проблема, поскольку у японского пользователя будет выбрана правильная кодовая страница. Нет обходного пути для того, чтобы иметь неправильный.

Убедитесь, что вы выбрали правильную системную кодовую страницу, Панель управления + Регион и Язык для изменения. И используйте WideCharToMultiByte () с CP_ACP, чтобы сделать преобразование.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]