java中的编码

  1. 字库表:相当于所有可读或者可显示字符的数据库
  2. 编码字符集(编码):用一个编码值来表示一个字符在字库中的位置
  3. 字符编码(编码格式):把编码值转换成另外一种存储格式

Unicode就是上文中提到的编码字符集,而UTF-8就是字符编码,即Unicode规则字库的一种实现形式。

编码字符集为字库表中的字符位置编码,两者一一对应,由于很多时候只使用到字库中的一部分字符,若使用编码字符集则会造成浪费,故使用字符编码

java的string使用的编码是unicode,但是在存储到外存或者通过网络传输前没有编码格式

  1. java字符串编码
public static void main(String[] args) throws IOException {

        String s = "篱开罗A";

        //不指定则使用项目默认字符编码将字符串转换位字节数组
        byte[] bytesWithUTF8 = s.getBytes();
        //指定使用GBK编码格式
        byte[] bytesWithGBK = s.getBytes("GBK");

        //不指定字符编码,默认使用项目字符编码,此处是UTF-8
        System.out.println(new String(bytesWithUTF8));
        for (byte b : bytesWithUTF8) {
            //toHexString接收的参数为int,此处byte被强制转换成int,& 0xff去除高24位
            //UTF-8每个中文使用三个字节,字母一个字节
            System.out.print(Integer.toHexString(b & 0xff) + " ");
        }
        System.out.println();

        //指定使用GBK进行解码
        System.out.println(new String(bytesWithGBK,"GBK"));
        for (byte b : bytesWithGBK) {
            // GBK每个中文使用两个字节,字母一个字节
            System.out.print(Integer.toHexString(b & 0xff) + " ");
        }
        System.out.println();


        //原本UTF-8编码格式的字节数组被指定使用GBK进行解码,得到乱码
        String errStr = new String(bytesWithUTF8, "GBK");
        //对错误字符串使用GBK进行编码,获取原字节数组
        byte[] bytes = errStr.getBytes("GBK");
        //使用UTF-8编码格式进行解码
        String rightStr = new String(bytes, "UTF-8");
        System.out.println("errStr: " + errStr);
        System.out.println("rightStr: " + rightStr);
    }

reference

十分钟搞清字符集和字符编码

java中GBK编码格式转成UTF8,用一段方法实现怎么做?

Java IO流

posted @ 2017-03-07 15:50  篱开罗  阅读(399)  评论(0编辑  收藏  举报