转义 JNI 代码的 Java 字符串

舒适

我有一个带有 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 源代码中工作的字符串文字。

安蒂·哈帕拉(Antti Haapala)

如果您可以使用 C11 和 GCC,您可以在 GCC 中使用新的char16_tUTF-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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从 JNI (C++) 代码返回一个字符串到 Java

来自分类Dev

在Java中取消转义字符串

来自分类Dev

用Java转义JSON字符串

来自分类Dev

Java转义JSON字符串?

来自分类Dev

Java字符串转义问题

来自分类Dev

如何在代码片段中转义字符串内插

来自分类Dev

从字符串中获取转义的unicode代码

来自分类Dev

从字符串中获取转义的unicode代码

来自分类Dev

如何在Java字符串中添加转义字符?

来自分类Dev

Java字符串使用不带转义符的引号

来自分类Dev

如何使用Java正确转义awk输入的字符串?

来自分类Dev

Java中的字符串中的转义引号

来自分类Dev

如何使用转义符号'^'在Java中拆分字符串?

来自分类Dev

Java - '\' 未用于在字符串中转义双引号 "

来自分类Dev

使用JNI将字符串从Java传递到C ++

来自分类Dev

获取从Java到C ++ JNI的字符串数组

来自分类Dev

获取从Java到C ++ JNI的字符串数组

来自分类Dev

转义字符串-Java中的输出rails字符串

来自分类Dev

Java:按字符串更改代码

来自分类Dev

字符串转义字符

来自分类Dev

转义字符串字符

来自分类Dev

如何使用前面没有转义字符的字符拆分Java字符串

来自分类Dev

我在FreeCodeCamp上的“字符串转义序列”挑战中的代码有什么问题?

来自分类Dev

如何在PostgreSQL中利用Python代码转义字符串进行SQLInjection

来自分类Dev

如何使用RMarkdown中的内联R代码防止LaTeX块中的字符串转义?

来自分类Dev

Java从字符串中减去字符代码的值

来自分类Dev

Java-转义字符

来自分类Dev

非法转义字符java

来自分类Dev

在Java中的字符串xml节点中转义xml字符