sybase cp850 生僻汉字解决办法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
}