了解编码的转换

关于编码的简单介绍

 


import java.io.IOException;
import java.io.UnsupportedEncodingException;

public class CharCode {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String strChina = "中国";
        /**
         * 打印出unico码
         * Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。
         * 每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,
         * “汉”这个字的Unicode编码是U+6C49。
         */
        for (int i = 0; i < strChina.length(); i++) {
            System.out.print(strChina.charAt(i)+"(的unico编码的十六进制表现形式为):");
            System.out.println(Integer.toHexString((int) strChina.charAt(i)));   
        }
        /**
         * 打印出每个字的国标码
         * 于是中国的标准化组织就出台了GB2312简体中文编码。
         * GB2312编码用两个字节(8位2进制)表示一个汉字,
         * 所以理论上最多可以表示256×256=65536个汉字。
         */
        try {
            byte[] buf = strChina.getBytes("gb2312");
            for (int i = 0; i < buf.length; i++) {
                System.out.println("国标gb2312码的十六进制为:"+Integer.toHexString(buf[i]));
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        /**
         * utf-8
         * 为了提高Unicode的编码效率,于是就出现了UTF-8编码。
         * UTF-8可以根据不同的符号自动选择编码的长短。
         * 比如英文字母可以只用1个字节就够了。
           * UTF-8的编码是这样得出来的,以”汉”这个字为例:
           * “汉”字的Unicode编码是U+00006C49,然后把U+00006C49通过UTF-8编码器进行编码,
         * 最后输出的UTF-8编码是E6B189。
         */
        try {
            byte[] buf = strChina.getBytes("utf-8");
            for (int i = 0; i < buf.length; i++) {
                System.out.println("utf-8码的十六进制为:"+Integer.toHexString(buf[i]));
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        /**
         * ASCII
         * 美国(国家)信息交换标准(代)码,一种使用7个或8个二进制位进行编码的方案,最多可以给256个字符
         * (包括字母、数字、标点符号、控制字符及其他符号)分配(或指定)数值。
         * 字母和数字的 ASCII 码的记忆是非常简单的。
         * 我们只要记住了一个字母或数字的 ASCII 码(例如记住 A 为 65 , 0 的 ASCII 码为 48 ),
         * 知道相应的大小写字母之间差 32 ,就可以推算出其余字母、数字的 ASCII 码。
         *
         */
        try {
            byte[] buf = strChina.getBytes("ASCII");
            for (int i = 0; i < buf.length; i++) {
                System.out.println("ASCII码的十六进制为:"+Integer.toHexString(buf[i]));
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
       
        //System.setProperty(key, value)//设置环境配置的键值
        System.getProperties().list(System.out);//运行环境参数
       
        System.out.println("请输入一个中文字符窜按enter结束输入并且得到unico编码");
        byte[] b = new byte[1024];
        String strInfo = null;
        int post = 0;
        int ch = 0;
        while(true){
            try {
                ch = System.in.read();
            } catch (IOException e) {
                e.printStackTrace();
            }
            //System.out.println(Integer.toHexString(ch));
            switch(ch){
            case '/r':
                break;
            case '/n':
                try {
                    strInfo = new String(b,0,post,"gb2312");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                for(int i = 0; i<strInfo.length();i++){
                    System.out.println(Integer.toHexString(strInfo.charAt(i)));
                }
                break;
            default:
                b[post++] = (byte)ch;   
            }
        }

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值