Java 与文字编码

Java 与文字编码

  1. 字符编码(维基百科

    字符编码就是将字符集中的字符转换为一种统一的表达方式,以便在计算机中进行存储和传输。
    其中ASCIIEBCDIC,以及中国的GBKGB 2312都属于字符编码。由于世界上字符编码众多,不同国家不同地区都有不同的编码,这十分不方便计算机的国际化和本地化,所以出现了Unicode

  2. Unicode编码表(维基百科)

    Unicode(中文:万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理文字。

    Unicode中,字符采用十六进制书写,并加上前缀U+,如U+0041就是字母A的代码点(编码表中字符对应的编码值)。Unicode分为了17个平面:

    5893832-a4cea0ce63d1cd91.png
    Unicode层面

    其中第一个层面包含基本的Unicode代码,代码点从U+0000U+ffff。另外16个平面代码点从U+010000U+10ffff,其中包含了一些辅助字符。

  3. UTF(Unicode Transformation Format)

    UTF被称为Unicode 转换格式,属于Unicode实现方式,其中包括UTF-7UTF-8UTF-16UTF-32

    UTF-8以8位为单元对通用字符集(由ISO制定的ISO 10646(或称ISO/IEC 10646)标准所定义的标准字符集。)进行编码。

    5893832-f7df73242dc1462d.png
    Unicode 和 UTF-8 之间的转换关系表 ( x 字符表示码点占据的位 )

    ASCII字母继续使用1字节存储,重音文字、希腊字母或西里尔字母等使用2字节来存储,而常用的汉字就要使用3字节。辅助平面字符则使用4字节。

    UTF-16以16位为一个单元对通用字符集进行编码。第一个Unicode平面(码位从U+0000至U+FFFF)包含了最常用的字符。UTF-16编码这个范围内的码位为16位的单个码元,数值等价于对应的码位。辅助平面(Supplementary Planes)中的码位,在UTF-16中被编码为一对16位长的码元。

  4. Java的文字编码

    Java编程语言中,char类型用于表示一个字符。Java中,char类型使用UTF-16编码描述码元。下面的例子中,我们将字符串输出到文件中,然后使用文档编辑器打开文件,看一下需要使用什么编码才能正常显示

    try(FileOutputStream fileOutputStream = new FileOutputStream("test.txt");
        DataOutputStream outputStream = new DataOutputStream(fileOutputStream)){
        outputStream.writeChars("一个中文字符串");
    }catch (IOException e){
        e.printStackTrace();
    }
    

    使用编辑器打开test.txt,发现只有使用utf-16编码才能正常显示内容。由此可见,java默认使用utf-16编码描述码元。

    但是在Java编程中,不推荐使用char类型,通常使用的是String。通过java.nio.charset.Charset类对一个字符串进行编码或对一个字节序列进行解码:

    //编码
    Charset charset = Charset.forName("utf-8"); //获得一个指定编码的字符集
    byte[] result = charset.encode("一个字符串内容").array();
    
    //解码
    ByteBuffer byteBuffer = ByteBuffer.wrap(reslut);
    CharBuffer charBuffer = charset.decode(byteBuffer);
    String str = charBuffer.toString();
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值