2012-01-10 21 views
7

Trong JNI, tôi muốn chuyển đổi char * để jstring sử dụng phương pháp sau đây:làm thế nào để chuyển đổi char [] thành jstring trong JNI?

env->NewStringUTF(chm_pcText) 

nó hoạt động cho văn bản tiếng anh, nhưng thất bại với Trung Quốc, và nhận được thông báo sau:

JNI WARNING: illegal continuation byte. 

Làm thế nào để giải quyết nó?

+0

Bạn có thể đăng một số mã có liên quan để chúng tôi có được chính xác những gì bạn muốn không? – Lion

+0

Định dạng nào là 'chm_pcText'? Có phải là UTF-8 không? Bạn có thể cung cấp một ví dụ nhỏ về 'chm_pcText' tạo ra lỗi này không? –

+0

chm_pcText được đọc từ một số tệp, mã hóa của nó bằng GBK. loại c của nó là char *. –

Trả lời

15

Tôi chỉ giải quyết nó: hai bước, trước tiên: chuyển đổi char * thành jbyteArray, sau đó gọi java String's contructor để tạo ra một chuỗi.

strClass = global_env->FindClass("java/lang/String"); 
ctorID = global_env->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V"); 
encoding = global_env->NewStringUTF("GBK"); 

jbyteArray bytes = global_env->NewByteArray(strlen(chm_pcText)); 
global_env->SetByteArrayRegion(bytes, 0, strlen(chm_pcText), (jbyte*)chm_pcText); 
jstring str = (jstring)global_env->NewObject(strClass, ctorID, bytes, encoding); 
+3

+1 vì đã nỗ lực chia sẻ giải pháp. –

+0

@David Bạn nên chấp nhận câu trả lời. 'NewStringUTF' là nạng, chỉ được sử dụng tốt nhất cho các chuỗi cố định mà bạn biết là tương thích. –

1

NewStringUTF đã làm việc cho tôi. Đây là mã làm việc cho tôi:

char *returnString = (char*)malloc(10); 
strcpy(returnString, "电脑"); 
return (*jnienv)->NewStringUTF(jnienv, returnString); 
Các vấn đề liên quan