• String中文字符转码


    如何使用String构造方法和String.getBytes()做好中文字符转码

     1 @Test
     2 public void test() {
     3     String testStr = "中";
     4     try {
     5         // 得到指定编码的字节数组 字符串--->字节数组
     6         byte[] t_iso = testStr.getBytes("ISO8859-1");
     7         byte[] t_gbk = testStr.getBytes("GBK");
     8         byte[] t_utf8 = testStr.getBytes("UTF-8");
     9         System.out.println("使用ISO解码..." + t_iso.length);
    10         System.out.println("使用GBK解码..." + t_gbk.length);
    11         System.out.println("使用UTF8解码..." + t_utf8.length);
    12         // 解码后在组装
    13         String ut_iso = new String(t_iso, "ISO8859-1");
    14         String ut_gbk = new String(t_gbk, "GBK");
    15         String ut_utf8 = new String(t_utf8, "UTF-8");
    16         System.out.println("使用ISO解码后再用ISO组装..." + ut_iso);
    17         System.out.println("使用GBK解码后再用GBK组装..." + ut_gbk);
    18         System.out.println("使用UTF8解码后再用UTF8组装..." + ut_utf8);
    19         // 有时候要求必须是iso字符编码类型
    20         // 可以先用GBK/UTF8编码后,用ISO8859-1组装成字符串,解码时逆向即可获得正确中文字符
    21         String t_utf8Toiso = new String(t_utf8, "ISO8859-1");
    22         // 将iso编码的字符串进行还原
    23         String ut_utf8Toiso = new String(t_utf8Toiso.getBytes("ISO8859-1"),"UTF-8");
    25         System.out.println("使用ISO组装utf8编码字符..." + t_utf8Toiso);
    26         System.out.println("使用ISO解码utf8编码字符..." + ut_utf8Toiso);
    27     } catch (UnsupportedEncodingException e) {
    28         e.printStackTrace();
    29     }
    30 }

    为什么使用ISO8859-1编码再组合之后,无法还原"中"字呢?
    其实原因很简单,因为ISO8859-1编码的编码表中,没有包含汉字字符,当然也就无法通过"中".getBytes("ISO8859-1");来得到正确的"中"字在ISO8859-1中的编码值了,所以再通过new String()来还原就无从谈起了.
    有时候,为了让中文字符适应某些特殊要求(如http header头要求其内容必须为iso8859-1编码),可能会通过将中文字符按照字节方式来编码的情况,如:
    String s_iso88591 = new String("中".getBytes("UTF-8"),"ISO8859-1"),这样得到的s_iso8859-1字符串实际是三个在ISO8859-1中的字符,在将这些字符传递到目的地后,目的地程序再通过相反的方式String s_utf8 = new String(s_iso88591.getBytes("ISO8859-1"),"UTF-8")来得到正确的中文汉字"中".这样就既保证了遵守协议规定、也支持中文.

  • 相关阅读:
    vue自定义指令clickoutside使用以及扩展用法
    抓包工具Charles的使用教程
    vue之element-ui文件上传
    Vue省市区三级联选择器V-Distpicker的使用
    Vue如何封装多个全局过滤器到一个文件
    vue工程中使用iconfont在线CDN不生效的问题
    es6 Null 传导运算符
    js中布尔值为false的六种情况
    vue-vli3创建的项目配置热更新
    js思维导图
  • 原文地址:https://www.cnblogs.com/ikuman/p/3238596.html
Copyright © 2020-2023  润新知