Java编码转换

public class Unicode {
    public static void main(String[] args) throws UnsupportedEncodingException{
        char c='编';  // 我们都知道c占用2个字节,这毫无疑问。
        String str="张三";  
        byte[] bytes=str.getBytes("GBK"); //这个打印出来,在不同的操作系统上可能有不同的
        
        String utf8 = new String(bytes, "UTF-8");
        
        byte[] uftBytes = utf8.getBytes("UTF-8");
        
        System.out.println(new String(uftBytes, "GBK"));
}

GBK转换成UTF-8然后回转换成GBK无法还原字符

public class Unicode {
    public static void main(String[] args) throws UnsupportedEncodingException{
        char c='编';  // 我们都知道c占用2个字节,这毫无疑问。
        String str="张三";  
        byte[] bytes=str.getBytes("UTF-8"); //这个打印出来,在不同的操作系统上可能有不同的</span>
        
        String utf8 = new String(bytes, "GBK");
        
        byte[] uftBytes = utf8.getBytes("GBK");
        
        System.out.println(new String(uftBytes, "UTF-8"));
}

UTF-8转换成GBK然后回转换成UTF-8可以还原字符(必须全部是中文,如果包含英文会出错)


转码分析:


UTF-8:已三个字节存储汉字,一个字节存储英文字母。

GBK:两个字节存储汉字,一个字节存储英文字母。


如果将UTF-8转成成字符数组如果两个个汉字加一个字母则总共7个字节,

此时更加GBK编码转换成Unicde,则前六个字节可以拼装成三个字,后面一个字节GBK无法识别则用3F表示此字节则丢失了最后一个字节

那么再反向转换为UTF-8则字节已经丢失。


如果将GBK转换成UTF-8 如果两个汉字则有四个字节,然后将字节数组封装成UTF-8, UTF-8无法识别字符组对应的转码后的字符则生成unicode,变成了乱码。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值