java
import java.io.UnsupportedEncodingException;
import java.util.Base64;
public class chatset {
public static void main(String[] args) throws UnsupportedEncodingException {
errorCode();
changeBinary();
binary ();
charset();
charset2();
}
//乱码问题,
public static void errorCode() throws UnsupportedEncodingException {
String a = "张";
//这里转换二进制使用的是 GBK 编码
byte[] bytes = a.getBytes("GBK");
// 正确方式是解码时,也使用GBK编码去解码
String s = new String(bytes,"GBK");
// 如果使用了别的编码 编译, 那么如果出现不认识的编码就会使用问号代替,那么该端乱码就永远无法还原了。
String ss = new String(bytes);
System.out.println(s);
System.out.println(ss);
//这里想将转错的汉字编码,在转回去,但是已经无法修复了。
//造成该问题的根源是字节发生了变化。GBK或UTF-8遇到无法解析的字符时,会使用特殊的字符代替,因此造成原有字节信息的丢失,无法恢复。
System.out.println(new String(s.getBytes(),"GBK"));
}
public static void changeBinary(){
//10 to 16
System.out.println(Integer.toHexString(10));
//10 to 8
System.out.println(Integer.toOctalString(10));
//10 to 2
System.out.println(Integer.toBinaryString(10));
//16 to 10
System.out.println(Integer.parseInt("FFFF",16));
//8 to 10
System.out.println(Integer.parseInt("776",8));
//2 to 10
System.out.println(Integer.parseInt("0101",2));
}
//一个中文在各个字符集中占几个字节。
public static void binary (){
System.out.println("各种进制的表示方式");
// 二进制:由0,1组成。以0b开头。
System.out.println("二进制 0b10 == "+0b10);
// 八进制:由0,1,...7组成。以0开头。
System.out.println("八进制 010 == "+010);
// 十进制:由0,1,...9组成。默认整数是十进制。
System.out.println("十进制 10 == "+10);
// 十六进制:由0,1,...9,a,b,c,d,e,f(大小写均可)组成。以0x开头。
System.out.println("十六进制 0x10 == "+0x10);
}
//一个英文在各个字符集中占几个字节。
public static void charset () throws UnsupportedEncodingException {
System.out.println("一个英文在各个字符集中占几个字节。");
String data = "A";
byte[] utf8s = data.getBytes("UTF8");
System.out.println("UTF8=" + utf8s.length);
byte[] gbks = data.getBytes("GBK");
System.out.println("GBK=" + gbks.length);
byte[] unicodes = data.getBytes("Unicode");
System.out.println("Unicode=" + unicodes.length);
byte[] gb2312s = data.getBytes("GB2312");
System.out.println("GB2312=" + gb2312s.length);
}
//一个英文字母在各个字符集中占几个字符
public static void charset2 () throws UnsupportedEncodingException {
System.out.println("一个中文在各个字符集中占几个字节。");
String data = "你";
byte[] utf8s = data.getBytes("UTF8");
System.out.println("UTF8=" + utf8s.length);
byte[] gbks = data.getBytes("GBK");
System.out.println("GBK=" + gbks.length);
byte[] unicodes = data.getBytes("Unicode");
System.out.println("Unicode=" + unicodes.length);
byte[] gb2312s = data.getBytes("GB2312");
System.out.println("GB2312=" + gb2312s.length);
}
}