gpt4 book ai didi

java - 为 JNI 代码转义 Java 字符串

转载 作者:太空宇宙 更新时间:2023-11-04 01:51:19 25 4
gpt4 key购买 nike

我有一个带有 Unicode 字符的 Java 字符串文字,需要将其转换为 C 字符串文字,它可以使用 JNIEnv.NewString 加载。

不幸的是,上述方法接受了一个指向unsigned short (jchar) 数组的指针。我试过使用如下代码:

unsigned short str[] = {65, 66, 67};
jstring java_str = (*env)->NewString(env, str, 3);

然而,这会占用大量空间,人类不可读且难以维护。

有没有办法在 C 中将字符串文字转换为 unsigned short[],同时仍然能够使用 Java 的 UTF-16 字符?

这种转义可以通过编程方式完成吗?即,将 java.lang.String 转换为可在 C 源代码中使用的字符串文字。

最佳答案

如果您可以使用 C11 和 GCC,则可以使用新的 char16_t,它将在 GCC 中成为 UTF-16:

#include <uchar.h>

#ifndef __STDC_UTF_16__
#error "char16_t not UTF-16"
#endif

...
char16_t my_string[] = u"abc";
jstring java_str = (*env)->NewString(env, str, 3);

然后用gcc -std=c11编译

但无论如何,大多数时候只使用 ASCII 字符串,为此可以简单地使用

jstring java_str = (*env)->NewStringUTF(env, "abc");

这将假定字符串采用修改后的 UTF-8 编码(即 UTF-16 代理项对单独编码为 UTF-8;并且以 null 终止)。由于 ASCII 是 UTF-8 的子集,因此这对于 ASCII 字符串非常有用。

关于java - 为 JNI 代码转义 Java 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42461016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com