sybase cp850 生僻汉字解决办法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

当服务器端的字符集默认安装是cp850,在输入汉字时服务器与客户端字符集不一样,要进行转换。

存入数据:new String(str.getBytes("gbk"),"iso-8859-1");

取出数据:new String(str.getBytes("iso-8859-1"),"gbk");

但是cp850只支持1,2级汉字,对于生僻汉字,此种转换机制就行不通了.

下面方法解决该问题。

存入数据:toIso(str);

取出数据:toGbk(str);

public static String toIso(String str) throws UnsupportedEncodingException{

StringBuffer sb = new StringBuffer();

for (int i = 0; i < str.length(); i++) {

String s = str.substring(i, i + 1);

byte[] bg = s.getBytes();

boolean change = false;

for(byte b:bg) {

int i_b = 0xFF & b;

if(i_b>0x7f&&i_b<0xa0){

change = true;

}

}

StringBuffer s_cha = new StringBuffer();

if(change){

for(byte b:bg) {

s_cha.append("%");

s_cha.append(Integer.toHexString(0xFF & b));

}

sb.append(s_cha.toString());

}else{

sb.append(s);

}

}

String gbk = sb.toString();

return new String(gbk.getBytes("gbk"),"iso-8859-1");

}

public static String toGbk(String str) throws UnsupportedEncodingException{

String gbk = new String(str.getBytes("iso-8859-1"),"gbk");

Pattern p = pile("%\\w\\w%\\w\\w");

Matcher m = p.matcher(gbk);

while(m.find()){

String o = m.group();

String[] ss = o.split("%");

byte[] b = new byte[2];

b[0] = (byte)Integer.parseInt(ss[1], 16);

b[1] = (byte)Integer.parseInt(ss[2], 16);

gbk =gbk.replace(o, new String(b,"gbk"));

}

return gbk;

}

相关文档
最新文档