JAVA——缓冲流 (编解码问题)

 1. 编码: 字符串对象.getBytes("指定字符集的名称")  ——>  byte[] bytes
2. 解码: new String(byte[], off, len, "指定解码使用的字符集") -> String对象

package com.cskaoyan.io02.charCode;

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

* 编解码只针对字符或者文本数据。
* byte, short, int, long, double等数据类型以及它们的数组没有编解码。
*
* java语言层面的编解码
* 1. 编码: 字符串对象.getBytes("指定字符集的名称") ——> byte[] bytes
* 2. 解码: new String(byte[], off, len, "指定解码使用的字符集") -> String对象
*
* 3. 当我们Coder在编解码的时候,没有指定编解码所使用的字符集,是哪个字符集呢? 默认字符集
* a. 在IDEA中,默认设置的默认字符集就是UTF-8;
* b. 原生的默认字符集和操作系统的本字符集一致。
*
* 基本常识:
* 1. gbk字符集中,两个字节,表示一个中文字符
* 2. UTF-8字符集, 通常习惯性的认为,3个字节表示一个字符
*
*/
public class Demo1 {

public static void main(String[] args) throws UnsupportedEncodingException {
String s = "你好";

// 编码 gbk
byte[] gbks = s.getBytes("gbk");
System.out.println(Arrays.toString(gbks)); /* [-60, -29, -70, -61]*/

// 解码 gbk
String gbkStr = new String(gbks, 0, gbks.length, "gbk");
System.out.println(gbkStr); /* 你好 */

//编码 utf-8
byte[] utf8 = s.getBytes("utf-8");
System.out.println(Arrays.toString(utf8)); /* [-28, -67, -96, -27, -91, -67]*/

//解码 utf-8
String utf8Str = new String(utf8, 0, utf8.length, "utf-8");
System.out.println(utf8Str); /* 你好*/

// 默认字符集
byte[] bytes = s.getBytes();
System.out.println(Arrays.toString(bytes)); /*[-28, -67, -96, -27, -91, -67]*/

//演示乱码
// 基于utf-8字符集编码
byte[] utf8Codes = s.getBytes("utf-8");

// 基于GBK字符集解码
String gbk = new String(utf8Codes, 0, utf8Codes.length, "gbk");
System.out.println(gbk); /* 浣犲ソ*/



//编解码一致 不行
// 基于ASCII
byte[] ascIIS = s.getBytes("ASCII");

//基于ASCII解码
String ascii = new String(ascIIS, 0, ascIIS.length, "ASCII");
System.out.println(ascii); /* ??*/
}

}
  乱码显示

 

 

 
posted @ 2020-09-01 22:53  LY心情笔记  阅读(156)  评论(0)    收藏  举报