package test; import java.io.*; import java.sql.SQLClientInfoException; import java.text.DateFormat; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.CountDownLatch; import java.util.zip.InflaterInputStream; import javax.annotation.processing.FilerException; import javax.management.RuntimeErrorException; import privateclass.Filterby_Name; import privateclass.Filterby_hidden; import privateclass.Filterby_java; import privateclass.MyBufferedReader; import privateclass.Person; public class Main { private static final String space_operator = " "; private static final double pi = Math.PI; private static final String LINE_SEPARATOR = System.getProperty("line.separator"); private static final int SIZE = 1024*1024; public static void main(String[] args) throws Exception { String s = "你好"; byte buf[] = new byte[1024]; //这个默认的是你自己编译器设置的编码 buf = s.getBytes(); String a = new String(buf); printByte(buf); System.out.println(a); //直接用gbk解码 buf = s.getBytes("gbk"); printByte(buf); String b = new String(buf,"gbk"); System.out.println(b); //当我们编码错了我们无法解析出来 buf = s.getBytes("iso-8859-1"); printByte(buf); String c = new String(buf,"gbk"); System.out.println(c); /* * 当我们解码错了我们还有可能解析出来 * 为什么有可能我们请看下面的两个例子 */ //这是重新解码成功的例子 buf = s.getBytes("gbk"); printByte(buf); String d = new String(buf,"iso-8859-1"); System.out.println(d); buf = d.getBytes("iso-8859-1"); String e = new String(buf,"gbk"); System.out.println(e); //下面是不成功的例子 String f = new String(buf,"utf-8");; System.out.println(f); buf = f.getBytes("utf-8"); String g = new String(buf,"gbk"); System.out.println(g); /* * 总结原因为什么可能解析成功 * 因为iso-8859-1不认识中文字符 * 并且他是单个字符解析 * 但是Utf-8认识中文字符并且他还支持三个字节为一个汉字 */ } private static void printByte(byte[] buf) { for(byte b : buf) { System.out.print(b + " "); } System.out.println(); } }
原文:https://www.cnblogs.com/WINDZLY/p/11831683.html