JAVA字符编码测试

几点注意:

1,ASCII码和ISO-8859-1都是单字节编码,ASCII码能表示128个字符,ISO-8859-1总共能表示256个字符。都不能表示中文,如果中文字符或其它不在IOS-8859码值范围内的字符会统一用3f表示(显示为"?", 通常所说的"黑洞");

2,GBK兼容GB2312,是双字节编码,GB2312包含6763个汉字,GBK包含21003个汉字;

3,UTF-16为定长双字节编码,大大简化了字符串的操作,但是会浪费存储空间。JAVA以UTF-16作为内存存储格式(见编码测试输出source行);

4,UTF-8采用变长,不同类型的字符可以由1~6个字节组成(汉字一般3个字节)。UTF-8规则如下:

  • 如果是1个字节,最高位(第8位)为0,则表示这是1个ASCII字符(00~7F)。可见,所有的ASCII编码已经是UTF-8了。
  • 如果是1个字节,以11开头,则连续的1的个数暗示这个字符的字节数,例如:110xxxxx代表它是双字节UTF-8字符的首字节。
  • 如果是1个字节,以10开头,表示它不是首字节,则需要向前查找才能得到当前字符的首字节。

测试代码:

package com.test.main;

public class TestCode {

    public static void encode(){
            String name = "淘!我喜欢!";
            toHex(name.toCharArray());
            String [] codeType = {"ISO-8859-1", "GB2312", "GBK", "UTF-16", "UTF-8"};
            for (String type : codeType) {
                try {
                    byte [] bytes = name.getBytes(type);
                    toHex(type, bytes);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
    }

    private static void toHex(String name, byte[] charArray) {
        System.out.print(String.format("%-15s", name + ":"));
        for (int i = 0; i < charArray.length; i++) {
            System.out.print(String.format("%-4x ", charArray[i]));
        }
        System.out.println();
    }

    private static void toHex(char[] charArray) {
        System.out.print(String.format("%-15s","source:"));
        for (int i = 0; i < charArray.length; i++) {
            System.out.print(String.format("%-4x ", (int)charArray[i]));
        }
        System.out.println();
    }
    public static void main(String[] args) {
        encode();
    }

}

输出:

时间: 2024-10-13 02:13:15

JAVA字符编码测试的相关文章

java字符编码详解

引用自:http://blog.csdn.net/jerry_bj/article/details/5714745 GBK.GB2312.iso-8859-1之间的区别 GB2312,由中华人民共和国政府制定的,简体汉字编码规范,大陆所有计算机中的简体中文,都使用此种编码格式.目前,我也不知道还有另外的简体汉字编码规范.与此对应的还有BIG5,是中华民国政府制定的,繁体汉字的编码规范,一般应用于海外计算机的繁体中文显示.所谓的繁体中文Windows,简体中文Windows,指的就是采用BIG5和

【字符编码】Java字符编码详细解答及问题探讨

一.前言 继上一篇写完字节编码内容后,现在分析在Java中各字符编码的问题,并且由这个问题,也引出了一个更有意思的问题,笔者也还没有找到这个问题的答案.也希望各位园友指点指点. 二.Java字符编码 直接上代码进行分析似乎更有感觉.   运行结果:   说明:通过结果我们知道如下信息. 1. 在Java中,中文在用ASCII码表示为3F,实际对应符号'?',用ISO-8859-1表示为3F,实际对应符号也是为'?',这意味着中文已经超出了ASCII和ISO-8859-1的表示范围. 2. UTF

Java 字符编码归纳总结

String newStr = new String(oldStr.getBytes(), "UTF-8");       java中的String类是按照unicode进行编码的,当使用String(byte[] bytes, String encoding)构造字符串时,encoding所指的是bytes中的数据是按照那种方式编码的,而不是最后产生的String是什么编码方式,换句话说,是让系统把bytes中的数据由encoding编码方式转换成unicode编码.如果不指明,by

java字符编码转换过程(转)

在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组.这个表示在不通OS下,返回的东西不一样! String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示,如 byte[] b_gbk = "中".getBytes("GBK"); byte[] b_utf8 = "中".getBytes("UTF-8"); by

java字符编码转换

在开发的过程中,字符编码常常令我们头痛.经常会出现各种各样的乱码.下面就介绍java的编码转换和常见的乱码是使用什么样的编码去读取的: 先看一张图片: 在看看java中如何处理编码的转换: package com.test; /** * 字符串编码转换 * @author Herman.xiong * @date 2015年7月16日09:36:59 * @version V3.0 * @since Tomcat6.0,Jdk1.6 * @copyright Copyright (c) 2015

java字符编码

java中的文字是16位整数(2个byte)序列,文件中的数据是8位的byte序列,如何将字符char转为byte -- 编码 字符编码(char encoding):将字符序列拆分为byte序列的拆分方法称为字符的编码 (1)UTF-16BE:将字符切两半,String.getByte("utf-16be"),支持65535个字符,中英文都是两个byte,定长编码,缺点是,英文浪费时间,只能支持unicode 4.0 (2)UTF-8:采用的是变长编码,1-4字节,按照数值从小到大采

Java 字符编码与解码

1.字符编码的发展历程 ①.ASCII 码 因为计算机只认识数字,所以我们在计算机里面的一切数据都是以数字来表示,因为英文字符有限,所以规定使用的字节的最高位是 0,每一个字节都是以 0-127 之间的数字来表示.比如 A 对应 65,a 对应 97.这便是 美国标准信息交换码,ASCII String str = new String("Aa"); byte[] strASCII = str.getBytes("ASCII"); System.out.printl

Java字符编码的转化问题

概述: 我想字符串的编码问题的确会困扰到非常多开发人员.我近期也是被困扰到了. 问题是这种,我们通过二维码扫描来获得二维码中的信息.可是.我们的二维码的产生过程却是"多样化"的.即在产生二维码的时候是以不同的字符串编码类型进行编码的.比方,GBK.GB2312.UTF-8等等.而这些不同的编码类型会产生不同的字节.在Java中.GBK和GB2312都是1个汉字占2个字节,UTF-8是1个汉字占3个字节.而ISO编码则是1上汉字1个字节.这样一来,我们在扫描二维码的时候就会出现一些&qu

java字符编码,字符转码

编码:String->byte[]; str.getBytes(charsetName) 解码:byte[]->String; new String(byte[],charsetName); package pack; import java.io.UnsupportedEncodingException; import java.lang.reflect.Array; import java.util.Arrays; public class Demo{ /** * 用gbk编码 utf解码