使用Java编程有时候需要使用JNI来实现效率方面或者是其他方面的问题。在JNI使用中不得不面临
的问题就是中文问题(如果你是老外,并且不关心中国建设,那就不用看了;或者你已经知道如何解决
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
的话,你也不用看了),JAVA采用UNICODE来支持运行时,当然类文件的保存格式是UTF-8。
~~~~~~~~~~~~~~~~~
当然了你用pure JAVA也不会出现问题的,其他出现的问题也不包含在今天的论题中(比如文件保存的字符集
或者是WEB开发中的中文问题)。当我们需要使用JAVA和本地环境混合编程时候,问题就来了:
(1)JAVA如何传递UNICODE字符串到本地环境
(2)本地环境如何传递UNICODE字符到JAVA环境
当然了,中国人我只关心中文在之间的转化,英文很好办,因为没有问题的,其他语言偶不关心。
[测试环境说明]
下面说明一下本人使用的环境。
(1)WINDOWS2000 Professional/512M DDR RAM/P4 2.0G
(2)SUN JDK1.4.0
(3)VC++ 6.0 /SP5
[测试过程说明]
============================
编写JAVA程序,得到接口文件
============================
//jni.java
public class jni
{
static
{
System.loadLibrary("jni");
}
public native String getChinese(String str);
public static void main(String args[])
{
jni j=new jni();
System.err.println("[从NATIVE环境返回字符]"+j.getChinese("测"));
char ch='测';
System.err.println("[在JAVA环境中]'测'的UNICODE="+(int)ch);
}
}
编译JAVA程序
%JAVA_HOME%\bin\javac jni.java
得到接口文件
%JAVA_HOME%\bin\javah jni
//jni.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class jni */
#ifndef _Included_jni
#define _Included_jni
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: jni