zoukankan      html  css  js  c++  java
  • java字符串各种编码

    一说到编码,就会想到ASCII、ISO-8859-1、GB2312、GBK、UTF-8、UTF-16这些,那么这些都是表示什么意思呢?相互间有什么关系呢?

    参考https://www.cnblogs.com/throwable/p/9188439.html

    ASCII

    全称是American Standard Code for Information Interchange,中文翻译为美国标准信息交换码。

    ASCII是单字节编码系统。标准ASCII使用7位二进制数来表示所有的大写字母、小写字母、数字0-9及英文标点符号等。

    27=128,所以ASCII只能表示128个字符。大写字母从十进制值65开始,往后查26个数。小写字母从十进制值97开始,往后查26个数。数字0-9从十进制值48开始,往后查10个数。ASCII不支持中文。

    示例:

        public static void main(String[] args) throws Exception {
            String value = "CO2";
            byte[] bytes = value.getBytes("ASCII");
            System.out.println(Arrays.toString(bytes));
            System.out.println(new String(bytes, "ASCII"));
        }

    String的getBytes方法把一个字符串转成字节数组,底层实际上是把字符串对应的字符数组转成字节数组。

    ISO-8859-1

    ISO-8859-1也是单字节编码系统。比ASCII好一点,ISO-9959-1编码范围是[0-255],其中[0-127]和ASCII一样。也就是说ISO-8859-1是向下兼容ASCII的。ISO-8859-1也不支持中文。

        public static void main(String[] args) throws Exception {
            String value = "CO2";
            byte[] bytes = value.getBytes("ISO-8859-1");
            System.out.println(Arrays.toString(bytes));
            System.out.println(new String(bytes, "ASCII"));
        }

    GB2312

    GB代表国标,2312是国标序号。这个是中国自己搞出来的编码集。除了收录了数字、大小写英文字母外,主要是收录了6763个汉字。可以满足大部分中文场景下的日常需要。但是要知道,汉字何止仅6763个,如朱镕基总理的镕字就没有收录进去。

        public static void main(String[] args) throws Exception {
            String value = "海贼王";
            byte[] bytes = value.getBytes("GB2312");
            System.out.println(Arrays.toString(bytes));
            System.out.println(new String(bytes, "GB2312"));
        }

    GBK

    GBK是国标扩展,在GB2312的基础上,总共收录了2w多的汉字。

        public static void main(String[] args) throws Exception {
            String value = "朱镕基";
            byte[] bytes = value.getBytes("GBK");
            System.out.println(Arrays.toString(bytes));
            System.out.println(new String(bytes, "GBK"));
        }

    unicode

    unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。unicode是两字节编码,采用两个字节编码一个字符。216=65536,所以unicode最多可以编码65536个字符。但是汉字简体加繁体有六七万个,而unicode也就只收录了7000多个汉字,所以单就对中文的支持来说,unicode是比不上GBK的。

        public static void main(String[] args) throws Exception {
            String value = "朱镕基";
            byte[] bytes = value.getBytes("unicode");
            System.out.println(Arrays.toString(bytes));
            System.out.println(new String(bytes, "unicode"));
        }

    UTF-8

    UTF-8,全称是8-bit Unicode Transformation Format,是可变长的unicode。如上面所说,unicode是定长的,采用2字节编码,所以unocode也称为UTF-16。在处理ISO-8859-1范围的字符时,用2个字节有点浪费,所以就出现了UTF-8。UTF-8使用1-4个字节编码字符。

        public static void main(String[] args) throws Exception {
            String value = "朱镕基";
            byte[] bytes = value.getBytes("UTF-8");
            System.out.println(Arrays.toString(bytes));
            System.out.println(new String(bytes, "UTF-8"));
        }

    乱码

    如果只是处理英文及数字字符串,永远不会乱码。乱码肯定是处理其他字符时产生的。

  • 相关阅读:
    JS代码和网页的混用
    猫扑论坛遭遇黑客挂马
    安全专家解析黑客攻击网银四大手段
    网页分析利器:IEDevToolBar
    2009年世界顶级杀毒软件排行榜
    英特尔遭遇CPU级RootKit,目前无药可医
    Linq联表查询
    从客户端中检测到有潜在危险的 Request.Form 值。
    MVC Cookie的使用
    TimSpan比较时间差
  • 原文地址:https://www.cnblogs.com/koushr/p/5899415.html
Copyright © 2011-2022 走看看