java big5到gb2312的编码转换
程序员文章站
2023-12-02 20:06:40
package com.big5toutf8; import java.io.*; public class big5tran { private static final...
package com.big5toutf8;
import java.io.*;
public class big5tran {
private static final string tabfile ="bg-gb.tab";
private static byte[] data;
static{
try{
fileinputstream fis =new fileinputstream(tabfile);
int len =fis.available();
data =new byte[len];
fis.read(data);
fis.close();
}catch(exception ex){
ex.printstacktrace();
system.exit(1);
}
}
/**
*取得big5汉字big在data中的偏移
*/
private static int indexof(int big){
int high =(big>>>8)&0xff;
int low =big&0xff;
high -= 0xa1;
if(low<=0x7e) low -= 0x40;
else low -= (0xa1 -0x7e -1) +0x40;
return 2*(high*157+low);
}
/**
*将保存在bs数字中的big5编码的字符串数据转换成gb2312编码的数据
*注意:此方法将更改原先存储的数据
*@param bs 需要转换的以big5编码的字符串数据
*@return bs 经过转换的数据,保存在参数中的byte数组中
*/
public static byte[] translatebig5togb(byte[] bs){
int index =0;
while(index<bs.length){
int high =bs[index]&0xff;
if(high>=0xa1&&high<=0xfe){
index ++;
if(index>=bs.length) break;
int low =bs[index]&0xff;
if(low<0x40||low>0xfe) continue;
if(low>0x7e&&low<0xa1) continue;
int offset =indexof((high<<8)|low);
bs[index-1] =data[offset];
bs[index ] =data[offset+1];
index++;
}
else index++;
}
return bs;
}
public static string translatebig5togb(string big){
string result =null;
try{
byte[] bs =big.getbytes("big5");
bs =translatebig5togb(bs);
result =new string(bs,"gb2312");
}catch(exception e){
}
return result;
}
}
import java.io.*;
public class big5tran {
private static final string tabfile ="bg-gb.tab";
private static byte[] data;
static{
try{
fileinputstream fis =new fileinputstream(tabfile);
int len =fis.available();
data =new byte[len];
fis.read(data);
fis.close();
}catch(exception ex){
ex.printstacktrace();
system.exit(1);
}
}
/**
*取得big5汉字big在data中的偏移
*/
private static int indexof(int big){
int high =(big>>>8)&0xff;
int low =big&0xff;
high -= 0xa1;
if(low<=0x7e) low -= 0x40;
else low -= (0xa1 -0x7e -1) +0x40;
return 2*(high*157+low);
}
/**
*将保存在bs数字中的big5编码的字符串数据转换成gb2312编码的数据
*注意:此方法将更改原先存储的数据
*@param bs 需要转换的以big5编码的字符串数据
*@return bs 经过转换的数据,保存在参数中的byte数组中
*/
public static byte[] translatebig5togb(byte[] bs){
int index =0;
while(index<bs.length){
int high =bs[index]&0xff;
if(high>=0xa1&&high<=0xfe){
index ++;
if(index>=bs.length) break;
int low =bs[index]&0xff;
if(low<0x40||low>0xfe) continue;
if(low>0x7e&&low<0xa1) continue;
int offset =indexof((high<<8)|low);
bs[index-1] =data[offset];
bs[index ] =data[offset+1];
index++;
}
else index++;
}
return bs;
}
public static string translatebig5togb(string big){
string result =null;
try{
byte[] bs =big.getbytes("big5");
bs =translatebig5togb(bs);
result =new string(bs,"gb2312");
}catch(exception e){
}
return result;
}
}
推荐阅读
-
java big5到gb2312的编码转换
-
Java Base64位编码与String字符串的相互转换,Base64与Bitmap的相互转换实例代码
-
linux系统下批量转换UTF8到GB2312并处理UTF8的BOM标记
-
Linux下将UTF8编码批量转换成GB2312编码的方法
-
Java “图片” 与 “base64编码字符串”的相互转换
-
java函数实现进制转换与java实现八进制到十进制的转换(百练OJ:2735:八进制到十进制)
-
汉字GB2312和UTF-8的编码转换
-
VBS实现GB2312,UTF-8,Unicode,BIG5编码转换工具
-
linux系统下批量转换UTF8到GB2312并处理UTF8的BOM标记
-
ASP中Utf-8与Gb2312编码转换乱码问题的解决方法 页面编码声明