我有一个带有 Unicode 字符的 Java 字符串文字,需要将其转换为 C 字符串文字,可以使用JNIEnv.NewString
.
不幸的是,上面的方法需要一个指向unsigned short
(jchar)数组的指针。我曾尝试使用如下代码:
unsigned short str[] = {65, 66, 67};
jstring java_str = (*env)->NewString(env, str, 3);
然而,这需要很大的空间,不是人类可读的,并且难以维护。
有没有办法将字符串文字转换为unsigned short[]
C 中的 a,同时仍然能够使用 Java 的 UTF-16 字符?
这种转义可以以编程方式完成吗?java.lang.String
即将 a转换为可以在 C 源代码中工作的字符串文字。
如果您可以使用 C11 和 GCC,您可以在 GCC 中使用新的char16_t
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;并以空字符结尾)。由于 ASCII 是 UTF-8 的子集,因此这对于 ASCII 字符串非常有用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句