GDAL在java中乱码问题解决方案

首先,需要明确几个关于编码的基本概念:

◆ java内部是使用的16bit的unicode编码(utf-16)来表示字符串的,无论英文还是中文都是2字节;

◆ jni内部是使用utf-8编码来表示字符串的,utf-8是变长编码的unicode,一般ascii字符是1字节,中文是3字节;

◆ c/c++使用的是原始数据,ascii就是一个字节,中文一般是GB2312编码,用2个字节表示一个汉字。

jni的中文字符串处理

先从字符流的方向分别对java–>C++和C++–>java进行分析

◆ java–>C++

这种情况下,java调用的时候使用的是utf-16编码的字符串,jvm把这个参数传递给jni,C++得到的输入是jstring,此时,可以利用jni提供的两种函数,一个是GetStringUTFChars,这个函数将得到一个UTF-8编码的字符串;另一个是GetStringChars这个将得到UTF-16编码的字符串。无论那个函数,得到的字符串如果含有中文,都需要进一步转化成GB2312的编码。

比天才难得,许多天赋差的人经过过勤学苦练也取得了很大的成功。

GDAL在java中乱码问题解决方案

相关文章:

你感兴趣的文章:

标签云: