java 中文转GBK码
遇到一个需求,一个接口的调用时,需要将中文转成对应的GBK码,然后发请求调用,大概搜了下,貌似没有简单可行的现成方法,不像python能够直接decode / encode。
找的时候有一个帖子给了启示: java默认用Unicode存储String,所以直接转成某种编码的byte的同时,就已经转成了该编码的encoding。
于是找了个例子,
天安门 对应的gbk码是: %CC%EC%B0%B2%C3%C5
于是转一下
byte[] bytes = source.getBytes("GBK");
再计算下补码(还是反码)神马的。
for(byte b : bytes) {
sb.append("%" + Integer.toHexString((b & 0xff)).toUpperCase());
}
就得到了上述的CC EC B0 B2 C3 C5
按照格式塞进去百分号,大功告成。完整的函数如下:
1 public static String toGBK(String source) throws UnsupportedEncodingException { 2 StringBuilder sb = new StringBuilder(); 3 byte[] bytes = source.getBytes("GBK"); 4 for(byte b : bytes) { 5 sb.append("%" + Integer.toHexString((b & 0xff)).toUpperCase()); 6 } 7 8 return sb.toString(); 9 }