C -JNI函数在Android返回非法UTF字符



im试图将字符串从JNI返回到Android,但其返回的非法UTF字符类似:

JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8:
illegal start byte 0x80
04-12 16:08:09.899 18210-18372 A/art:art/runtime/runtime.cc:427]
string: '���� ���!��"��,"���"���#���$��%���
%��`&��'��H(���)��D*���*��X+��,���,���-��4.��|.��P/��t/���/��01��x1��
2��D2���2���3���4���5��06���6��9���9��;���;��H<��=��0=���=���>��8?��

这是我正在使用的代码:

JNIEXPORT jbyteArray Java_pakdata_com_qurantextc_MainActivity_get(
    JNIEnv *pEnv,
    jobject this,
    jint pageNo, jint lang) {

char* buffer=(char*)malloc(10000);  // this buffer contains the ayat
register unsigned int pageNumber = pageNo - 1;
char * header=(char*)malloc(1000);
sprintf(header,"[{"OFFSET":%d,"DATA":"",pageNumber+1);
strcpy(buffer,header);
// to get the last ayat of the page
// this loop will fetch all ayats of the page
for (int i = start_ayat; i <= end_ayat; i++) {

sprintf(buffer+strlen(buffer),"<div class=\"qr0\" data-ayat=\"%d\" id="%d\"><span>",i+1,i+1);
get(lang, i, buffer + strlen(buffer)); // len is equal to length of buffer (   strlen()  )
        strcpy(buffer+strlen(buffer),"<\/span><\/div>");

}
  // char* footer;
sprintf(buffer+strlen(buffer),"<div class=\"pagebreak">%d<a id=\"%d\"next\"href=\"\/page\/%d\"></a><\/div <\/div>"}]",pageNumber+1,pageNumber+1,pageNumber+1);
__android_log_print(ANDROID_LOG_DEBUG, "LOG_TAG","string: '%s'" , buffer);
int l = strlen(buffer);
char c[l];
strcpy(c,replace(buffer,"r","<br>"));
jbyteArray ret = (*pEnv)->NewByteArray(pEnv,l);
(*pEnv)->SetByteArrayRegion (pEnv,ret, 0, l, c);
const char * errorKind = NULL;
uint8_t utf8 = checkUtfytes(c, &errorKind);
if  (errorKind != NULL) {
    free(buffer);
    return ret;
} else {
    free(buffer);
    return ret;
}

我也尝试过使用此方法:

return = (*pEnv)->NewStringUTF(pEnv,buffer)

,但它仍然包含非法UTF字符..

这是我的Android侧代码

byte[] ss = get(a, pos);
s= new String(ss,"UTF-8");

仍然遇到非法UTF字符错误。我尝试在Java方面进行编码,但也没有任何帮助我在这里发布,因为我已经尝试过的所有其他方法都尝试过,但它没有起作用。

请帮助!

可能是我迟到了,但是您的代码似乎是正确的,但是根据JNI文档,它们不支持这些字符。您必须从服务器端处理它。希望它有帮助。

最新更新