String类的编码和解码问题

我们前面知道同一个字符在利用不同的编码表得到的结果一般是不一样的。

这里讨论个字符串的编码和解码问题

字符串的一些方法:

String(byte[] b,Charset charset);

String(byte[] b,int offset,int length,Charset charset);

byte[] getBytes(String charsetName)

什么是编码解码?

编码:把看得懂的变成看不懂的

解码:把看不懂的变成看得懂的

编码问题只要编码解码使用的而编码表是一致的就即可解决

一个小例子:谍战片(发电报,接电报)

码表:  小本子

    数值  字符

信息:

今天下午2:00,老地方见

发电报:  字符---数值----二进制   电报机101010...

收电报:  二进制----十进制---码表----字符-----拼接成信息

windows的默认编码是本地编码是GBK

package com.StringTransform;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;

public class StringTransformDemo {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String s="你好";
//        byte[] b=s.getBytes();//[-60, -29, -70, -61] 编码  2个字节代表一个中文
//        byte[] b=s.getBytes("GBK");//[-60, -29, -70, -61] 编码结果完全相同,还可以多次测试知道,默认编码是GBK
        byte[] b=s.getBytes("utf-8");//[-28, -67, -96, -27, -91, -67] utf-8一般将中文变成3个字节表示一个中文
        System.out.println(Arrays.toString(b));
//        String message=new String(b);//解码  使用GBK编码的时候直接解码也成功,所以默认解码方式也是GBK  直接解码utf-8出现浣犲ソ
        String message=new String(b,"utf-8"); //使用对应的编码表解码发现就能得到想要的信息
        System.out.println(message);
    }

}
原文地址:https://www.cnblogs.com/aigeileshei/p/5573778.html