gpt4 book ai didi

java - NewString() & NewStringUTF() 显示错误无效修改后的 UTF-8 :

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:39:42 29 4
gpt4 key购买 nike

我正在尝试使用 android 中的 JNI 将 char* 从 C++ 传递到 java。我已经尝试了多种方法来传递该数据

1) 使用 NewStringUTF:

const char* data = getData(); // this method returns a char array.
env->NewStringUTF(data);

执行上面的代码抛出以下错误

JNI WARNING: input is not valid Modified UTF-8: illegal continuation byte 0x70.

2) 使用 NewString:

const char* data = getData(); // this method returns a char array.
// passing a byte array to java
jbyteArray trackIDArray = env->NewByteArray(strlen(data));
env->SetByteArrayRegion(trackIDArray, 0, strlen(data), (const jbyte*)trackID);

在 Java 端,我得到了一些垃圾值。我不明白如何将此 char 数组转换为 Java。

最佳答案

1) 您的 data 根本不是有效的 UTF-8 字符串。并非每个字符数组都自动成为有效的 UTF-8。您可能以某种单字节编码(如 ISO 或 Windows CP)拥有它,或者它根本不是可读的字符串。

2) 应该没问题,但要显示从 data 中填充 trackID 的代码。您需要将其硬类型转换为 jbyte* 这一事实令人怀疑。 此代码可能是正确的,但您也可能在 Java 端犯错误:

如果data 不是可读字符串或不是“平台的默认字符集” 的单字节编码java.lang.String(byte[]) constructor将无法从中生成可读的字符串!在这种情况下,您必须在 C 端转换为 UTF-8。您还将摆脱对平台特定编码(可能截然不同)的依赖。

关于java - NewString() & NewStringUTF() 显示错误无效修改后的 UTF-8 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14956439/

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