Android - 从JNI中传入UTF8的字符到Java
2010-03-26 08:01
375 查看
由于env->NewStringUTF支持的是Modified UTF-8,所以这个API不能用来从JNI
中传入标准的UTF8字符到Java。
我们有两种解决方法:
Java代码
ReturnUTF8.java
# javac ReturnUTF8.java
# javah ReturnUTF8
-> 这里会生成一个ReturnUTF8.h头文件
C++代码
ReturnUTF8.cpp
# g++ -shared -I /usr/lib/jvm/java-1.5.0-sun/include -I /usr/lib/jvm/java-1.5.0-sun/include/linux ReturnUTF8.cpp -o libReturnUTF8Jni.so
# export LD_LIBRARY=.
# java ReturnUTF8
中传入标准的UTF8字符到Java。
我们有两种解决方法:
Java代码
ReturnUTF8.java
public class ReturnUTF8 { static { System.loadLibrary("ReturnUTF8Jni"); } public static native byte[] method1(); public static native Object method2(); public static void main(String[] args) { try { byte[] buffer = ReturnUTF8.method1(); String s1 = new String(buffer, "UTF-8"); System.out.println("s1 = " + s1); String s2 = ReturnUTF8.method2().toString(); System.out.println("s2 = " + s2); } catch (java.io.UnsupportedEncodingException e) { e.printStackTrace(); } } }
# javac ReturnUTF8.java
# javah ReturnUTF8
-> 这里会生成一个ReturnUTF8.h头文件
C++代码
ReturnUTF8.cpp
#include "ReturnUTF8.h" JNIEXPORT jbyteArray JNICALL Java_ReturnUTF8_method1 (JNIEnv *env, jclass cls) { jbyte buffer[] = /* UTF8 encoding buffer */ jbyteArray bytes = env->NewByteArray(sizeof(buffer)); env->SetByteArrayRegion(bytes, 0, sizeof(buffer), buffer); return bytes; } JNIEXPORT jbyteArray JNICALL Java_ReturnUTF8_method2 (JNIEnv *env, jclass cls) { jbyte buffer[] = /* UTF8 encoding buffer */ jbyteArray bytes = env->NewByteArray(sizeof(buffer)); env->SetByteArrayRegion(bytes, 0, sizeof(buffer), buffer); jchar encoding_name[] = { 'U', 'T', 'F', '-', '8', '/0' }; jstring encoding = env->NewString(encoding_name, 5); jclass theStringClass = env->FindClass("java/lang/String"); jmethodID mid = env->GetMethodID(theStringClass, "<init>", "([BLjava/lang/String;)V"); jobject result = env->NewObject(theStringClass, mid, bytes, encoding); return result; }
# g++ -shared -I /usr/lib/jvm/java-1.5.0-sun/include -I /usr/lib/jvm/java-1.5.0-sun/include/linux ReturnUTF8.cpp -o libReturnUTF8Jni.so
# export LD_LIBRARY=.
# java ReturnUTF8
相关文章推荐
- Android 从JNI中传入UTF8 的字符到Java
- Android从JNI中传入UTF8 的字符到Java
- Android 从 JNI 中传入 UTF8 的字符到 Java
- 学习android JNI的那些事儿--------6. 在java中传入引用数据类型(对象)作为参数
- Android问题集锦转载之三:Javah 常见错误记录-NDK与JNI除错
- 关于JAVA和Android的JNI的使用
- Android JNI 中文字符传递
- ANDROID JNI之JAVA域与c域的互操作
- 为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- android jni (2) java与c++相互调用
- 有关于JAVA与后端C应用UTF8字符的通信
- Java For Android - 操纵字符串中的字符
- Android JNI开发,C调用Java方法遇到的问题
- Android之jni编译出现no matching function for call to '_JNIEnv::GetJava(JNIEnv* &, Java VM**)'解决办法)'
- 在Ubuntu为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口 (学习老罗的)
- android jni检测 char utf8
- Android-Jni线程(三)— JNI全局回调java方法
- 深入了解android平台的jni---本地多线程调用java代码
- JNI编程 —— 让C 和Java相互调用 - android - 牛蹄印章