package newFeatures8;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
/*
* 编码(由看得懂到看不懂):字符串变字节数组
* 解码(由看不懂到看得懂):字符数组变字符串
* String--》byte[];//str.getBytes();//str.getBytes(String CharsetName);
* byte[]--》String;//new String(byte[] bytes)//new String(byte[] bytes,String CharsetName);
*/
public class Practice {
public static void main(String[] args) {
try {
String s="你好";
//ISO-8859-1 根本就不识别中文
// byte[] bytes=s.getBytes("gbk");
// System.out.println(Arrays.toString(bytes));//[-60, -29, -70, -61]
//使用utf-8 编码每个字符占3个字节
//byte[] bytes=s.getBytes("utf-8");
// System.out.println(Arrays.toString(bytes));//[-28, -67, -96, -27, -91, -67]
// String s1=new String(s.getBytes("utf-8"), "gbk");//浣犲ソ
// String s1=new String(s.getBytes("gbk"), "utf-8");//???
//当网页已经出现乱码,而使用的Tomcat服务器,Tomcat服务器使用的是ISO-8859-1 只需要再编码解码即可
String s1=new String(s.getBytes("ISO-8859-1"), "utf-8");
System.out.println(s1);
//一般要养成一个习惯:就是全部用utf-8
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
package newFeatures8;
import java.io.UnsupportedEncodingException;
public class Practice {
public static void main(String[] args) throws UnsupportedEncodingException {
getLowest8Bit();
}
/*
* 通过研究发现:当往记事本里写入"联通"两字时,保存后打开,发现出现乱码
* 原因是:当你写入中文时:记事本使用的是GBK(按照一个字符两个字节)编码
* ,当你打开记事本时,使用的是UTF-8(按照一个字符3个字节)解码
* 如何解决:只要在联通前加个汉字即可,不能是字母
*
* "联通"二字比较特殊
* 其二进制数的最低8位刚好符合UTF-8的解码格式
*/
public static void getLowest8Bit() throws UnsupportedEncodingException{
String s="联通";
byte[] bytes=s.getBytes("gbk");
for (byte b : bytes) {
//System.out.println(Integer.toBinaryString(b));
/*
11111111111111111111111111000001
11111111111111111111111110101010
11111111111111111111111111001101
11111111111111111111111110101000
*/
//通过使用 与上 &0xff 来获取其最低最低8位 0xff=255
System.out.println(Integer.toBinaryString(b&0xff));
/*
* 11000001
10101010
11001101
10101000
*/
//匹配到了utf-8 的标志位
//一个字节 标志位0打头
//两个字节 :第一个字节110打头,第二个字节10打头
//三个字节:第一个字节1110打头,第二个字节10打头,第三个字节10打头
}
}
}