opencc源码安装
# git clone https://github.com/BYVoid/OpenCC
# cd OpenCC
[root@VM_130_110_centos OpenCC]# yum install doxygen
make
sudo make install
创建软链接
通过find / -name libopencc.so.2找到libopencc.so.2的路径,设置软链接。
[root@VM_130_110_centos OpenCC]# ln -s /usr/lib/libopencc.so.2 /usr/lib64/libopencc.so.2
[root@VM_130_110_centos OpenCC]# opencc --version
Open Chinese Convert (OpenCC) Command Line Tool
Version: 1.0.5
java调用opencc
方式一:通过shell
(1)编写shell脚本
#!/bin/sh
#echo $1
echo $1 |opencc -c s2tw
chmod +x opencc.sh
java调用shell
public static Object sc2tw(String content){
try {
StringBuffer sb = new StringBuffer("");
Process ps = Runtime.getRuntime().exec("/usr/local/s2tw.sh \""+content+"\"");
BufferedReader in = new BufferedReader(new InputStreamReader(ps.getInputStream()));
String line = null;
ps.waitFor();
while((line = in.readLine())!=null){
sb.append(line);
}
in.close();
if(sb.indexOf("\"")==0){
sb = sb.deleteCharAt(0);
}
if(sb.lastIndexOf("\"")==sb.length()-1){
sb = sb.deleteCharAt(sb.length()-1);
}
ps.destroy();
line = null;
return sb;
} catch (IOException e) {
logger.error("shell执行出错");
} catch (InterruptedException e) {
logger.error("shell执行出错");
}
return content;
}
当shell脚本传入的参数特别大时,java会一直等待shell脚本执行完成,所以对于长度特别长的文本采用分段转换。
方式二:通过jni(这种方式我没有尝试,只是思路)
jni主要用来调用c/c++代码,
(1)首先创建一个Java类文件
import java.util.*;
public class TestJni
{
//声明原生函数:参数为String类型
public native void print(String content);
//加载本地库代码
static
{
System.loadLibrary("TestJni"); //这个TestJni是后面生成
}
}
(2)生成TestJni.h文件
编译 TestJni.java文件:javac TestJni.java
javah -jni TestJni
(3)创建TestJni.c文件
#include <jni.h>
#include <stdio.h>
#include <TestJni.h>
JNIEXPORT void JNICALL
Java_TestJni_print(JNIEnv *env,jobject obj, jstring content)
{
//这里面的内容应该改成调用opencc的方法
// 从 instring 字符串取得指向字符串 UTF 编码的指针
//注意C语言必须(*env)-> C++ env->
const jbyte *str =
(const jbyte *)(*env)->GetStringUTFChars(env,content, JNI_FALSE);
printf("Hello---->%s\n",str);
// 通知虚拟机本地代码不再需要通过 str 访问 Java 字符串。
(*env)->ReleaseStringUTFChars(env, content, (const char *)str );
return;
}
(4)生成libTestJni.so库文件
生成的这个so库文件要让Java工程可以找到。
(5)其它Java类调用TestJni类中的方法即可。