Java 乱码 进制转换 字符集基础

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);
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值