Java中文转GBK码
来源:互联网 发布:用js怎么写九九乘法表 编辑:程序博客网 时间:2024/06/08 14:13
遇到一个需求,一个接口的调用时,需要将中文转成对应的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
按照格式塞进去百分号,大功告成。完整的函数如下:
public static String toGBK(String source) throws UnsupportedEncodingException { StringBuilder sb = new StringBuilder(); byte[] bytes = source.getBytes("GBK"); for(byte b : bytes) { sb.append("%" + Integer.toHexString((b & 0xff)).toUpperCase()); } return sb.toString(); }
补:
public class Tranform {public static void main(String args[]) throws Exception { String chineseStr="我们"; Transform t=new Transform(); System.out.println(t.Chinese2UTF_8(chineseStr)); System.out.println(t.Chinese2GBK(chineseStr)); System.out.println(t.GBK2Chinese(t.Chinese2GBK(chineseStr)));}} class Transform { //中文转换成UTF-8编码(16进制字符串),每个汉字3个字节 public String Chinese2UTF_8(String chineseStr)throws Exception {StringBuffer utf8Str = new StringBuffer();byte[] utf8Decode = chineseStr.getBytes("utf-8");for (byte b : utf8Decode) utf8Str.append(Integer.toHexString(b&0xFF));return utf8Str.toString().toUpperCase(); } //中文转换成GBK码(16进制字符串),每个汉字2个字节 public String Chinese2GBK(String chineseStr)throws Exception {StringBuffer GBKStr = new StringBuffer();byte[] GBKDecode = chineseStr.getBytes("gbk");for (byte b : GBKDecode) GBKStr.append(Integer.toHexString(b&0xFF));return GBKStr.toString().toUpperCase();} //16进制GBK字符串转换成中文 public String GBK2Chinese(String GBKStr)throws Exception{byte[] b = HexString2Bytes(GBKStr);String chineseStr = new String(b, "gbk");//输入参数为字节数组return chineseStr; } //把16进制字符串转换成字节数组 public byte[] HexString2Bytes(String hexStr) { byte[] b = new byte[hexStr.length() / 2]; for (int i = 0; i < b.length; i++) b[i]=(byte) Integer.parseInt(hexStr.substring(2*i,2*i+2),16);return b; } //把字节数组转换成16进制字符串 public static final String bytesToHexString(byte[] byteArray){ StringBuffer hexStr = new StringBuffer(byteArray.length*2); for (int i = 0; i < byteArray.length; i++) { String sTemp= Integer.toHexString(0xFF& byteArray[i]); int j=0; while(j<2-sTemp.length()) {sTemp="0"+sTemp;j++;} hexStr.append(sTemp.toUpperCase()); } return hexStr.toString();} }
阅读全文
0 0
- Java中文转GBK码
- Java--中文字符转GBK码
- java GBK中文乱码问题
- 【原】JAVA实现GBK,UTF-8与中文互转。
- Java 中文字符串编码之GBK转UTF-8
- Java GBK中文乱码问题分析
- GBK编码,解码。以及,有关url中文转码!
- utf8/gbk和中文汉字的转码关系
- java gbk转utf8
- [转]vim打开中文(gbk)乱码
- PHP中文GBK编码转UTF-8
- eclipse 编写java 窗口中GBK转UTF-8中文出现乱码
- UTF-8项目发送GBK报文,JAVA实现UTF-8转码为GBK
- java 【GBK转UTF-8】
- java gbk转utf-8
- java utf-8 转 gbk / gbk 转 utf-8
- Java 字符转码之UTF-8转为GBK/GB2312
- Qt QString 中文 char* UTF-8 QByteArray QTextCodec unicode gb2312 GBK 乱码与转码问题
- 10月20日云栖精选夜读:揭秘云栖大会VR直播云服务解决方案的技术亮点和核心能力
- 菜单权限设计实现
- Linux的琐碎事儿~~
- [LeetCode]58. Length of Last Word
- erlang开发工具之intellij idea基本使用
- Java中文转GBK码
- <背包DP>codevs 1684 垃圾陷阱
- Yaml简易学习
- Animation Silder实现动画播时滑动条随之滑动
- android面试-内存泄漏(美图、久邦面涉及到)
- JDK7中ExecutorService源码概述
- 揭秘云栖大会VR直播云服务解决方案的技术亮点和核心能力
- UVa11538
- 习题4.2