以下是毕姥爷关于解码编码的程序,我稍微修改了下,有几个不明白的地方:
1.毕姥爷不是说联通GBK二进制编码形式正好符合UTF-8的编码形式么,既然联通二字的GBK二进制编码形式正好符合UTF-8编码形式,那么UTF-8解码后应该是UTF-8能识别的字符啊?而程序的结果怎么对联通二字进行GBK编码后进行UTF-8解码的字符是"???",这个不理解,求高手指教!!!
2.联通二字的二进制编码依次是11000001 10101010 11001101 10101000,按UTF-8查表规则,这些二进制编码查出来的应该是两个字符,怎么程序打印出来的是三个不识别的字符(即?)?
程序代码如下:
mport java.util.*;
class EncodeDemo2
{
public static void main(String[] args) throws Exception
{
String s = "你好";//依次换成哈哈和联通
System.out.println("需编码的文字s: "+s);
byte[] b1 = s.getBytes("GBK");
int x = 1;
System.out.println("需编码文字的GBK编码b1: "+Arrays.toString(b1));
for (byte b : b1 )
{
//输出二进制编码
System.out.println("第"+x+"个字节的二进制编码:"+Integer.toBinaryString(b&255));
x++;
}
String s1 = new String(b1,"UTF-8");
System.out.println("GBK编码后查表UTF-8的乱码文字s1: "+s1);
//对s1进行iso8859-1编码
byte[] b2 = s1.getBytes("utf-8");
System.out.println("乱码文字的utf-8解码b2: "+Arrays.toString(b2));
String s2 = new String(b2,"gbk");
System.out.println("utf-8解码后查GBK表的错误文字s2="+s2);
}
}
|
|