zoukankan      html  css  js  c++  java
  • (24)码表

    码表

    Gbk 中文2字节,英文1个字节

    Utf-8 中文3个字节,英文1个字节

    Utf-16 = unicode编码,中英文都是占2个字节,英文虽然也是两个字节,但是,英文编码的高字节为0.注意一点,utf-16编码编码时,getbytes前两个是-2 -1 这标志设使用的是utf-16编码。

    编码和解码

    编码:把看的懂的数字变成看不懂的码值这个过程我们称之为编码

    解码:把码值查找对应的字符,这个过程叫做解码。

    注意:编码与解码,我们一般使用同一的码表,否则非常容易使用乱码,事实上只是汉字容易重现乱码,英文在任何编码集合中都是兼容的。

    str.getbytes()默认使用平台的编码规则进行解码,当然可以手动指定编码规则,比如str.getBytes("utf-8")

    new String()默认也是按照平台的编码规则进行编码的,也可以手动指定。new String(bytes, "utf-8")

    注意了,使用io时,我们经常从读进来一些字符,保存在String对象中,这时的数据时字符串,我们可以使用getBytes转换成任意的编码,只需要为getBytes传入相应的参数即可。但是byte数组到String时不是随意指定编码的,必须和getBytes中的编码一致,否则就会乱码。

    看下面的一个例子:

     1 String str = "大家好";
     2         byte[] buf = str.getBytes();
     3         System.out.println("gbk编码后的数组:"+Arrays.toString(buf));
     4         str = new String(buf, "iso_8859-1");    //这个时候得到的一定是乱码 这些事欧洲文字,控制台无法显示,将以?显示
     5         
     6         //还原乱码 并非多有的乱码都能还原,iso_8859-1是一个特例,每个欧洲文字都用一个字节编码,且刚刚好把256个码值用完,也就是说在他自身的编码体系总,所有的码值和所有的码字都一一对应。
     7         byte[] buf2 = str.getBytes("iso_8859-1");
     8         str = new String(buf, "gbk");
     9         
    10         System.out.println(str);
  • 相关阅读:
    react-router-dom中的BrowserRouter和HashRouter,link与Navlink
    在React中使用react-router-dom路由
    详解react中的state,props,refs
    简单明了的vuex详解
    暂时性死区
    es6中的块级作用域
    es6的let
    前端模块化
    Web框架
    百分比布局 双飞翼布局 圣杯布局
  • 原文地址:https://www.cnblogs.com/OliverZhang/p/6026671.html
Copyright © 2011-2022 走看看