import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { char i= 20000; for(; i <=41000; i++){ System.out.print(i+" "); //将数i对应的字符变成字符串形式 //比如i数值是30000, 而unicode数值30000对应的字符是'田' //也就是说i的数值是30000, i的字符值是字符'田', s就是字符串"田" //i的字符值是字符'田': (i在unicode方式下被理解为(被解析为)字符'田', 当然[unicode是最本源的是字符方式了或者说unicode就是字符的定义]) String s = Character.toString(i); //"田"在unicode中表示为2给个节(unicode是最基本的编码, 就是用两个字节不止三个字节不到来表示全世界的语言(估计全世界所有语言应该可用用百万个符号来表示完吧),怎么表示? 从0开始往上数, 0、1、2、3...,一直数到多余两个字节少于三个字节所能表示的最大数(如果你喜欢从1开始往上数, 我也不介意)) //目的: s和s2都被解析成(理解成)字符串"田" //被什么解析成"田"?被什么什么系统或被java或被jvm或被jdk反正就是类似这意思 //字符'田'对应的两个字节(假定字符'田'在unicode中用两个字节表示, 具体多少个字节我也不清楚), 那么这两个字节将会作为utf-8编码器的输入, //utf-8编码器输出的将是utf-8编码所理解的字符'田', 当然utf-8输出的用来表示字符'田'的若干字节(是3个字节)的二进制值肯定和unicode的'田'的若干字节(两字节到三字节之间)的二进制值不一样了 String s2 = new String(s.getBytes(), "UTF-8"); //这个就是utf-8下的字符'田'的若干字节的二进制值 byte[] bytes = s2.getBytes(); System.out.print(bytes.length+" "); for(int n = 0; n < bytes.length; n++){ System.out.print(bit_byte(bytes[n])+" "); } System.out.print("/t"); if(i%20==0){ System.out.println(); } } } public static String bit(int i){ int b = 0x00008000; String s = ""; for(int n=1; n <= 16; n++){ s+=((i&b)!=0?'1':'0'); b=(b>>1); } return s; } public static String bit_byte(int i){ int b = 0x00000080; String s = ""; for(int n=1; n <= 8; n++){ s+=((i&b)!=0?'1':'0'); b=(b>>1); } return s; } }