美文网首页
[Java NIO]Java 字符集

[Java NIO]Java 字符集

作者: 檀香灰 | 来源:发表于2020-08-06 18:08 被阅读0次

    1.Java 与 Unicode

    • Unicode ,也叫做统一码,是计算机领域里的业界标准,包括字符集和编码方案;解决跨语言、跨平台的的文本处理问题,90年开始研发,94年正式公布。
    • Unicode 把全世界所有的语言的字符集统一到一个独立的、全面的映射中。
    • Java 使用Unicode 表示字符,与以字节为导向的C、C++ 相比,Unicode 的固有支持简化了字符的数据处理。

    大部分操作系统在I/O 与文件存储方面仍然是以字节为导向的,所以无论使用何种编码,Unicode或其它,在字节序列和字符集编码之间仍然需要转化。

    2.JVM 的字符集

    • 每个JVM 都需要支持标准的字符集,如US-ASCII/ISO-8859-1/UTF-8/UTF-16/UTF-16LE/UTF-16BE
    • JVM 启动时确定默认值,取决于潜在的操作系统环境、区域设置JVM 设置等

    3.Unicode 与 UTF-32/UTF-8

    • Unicode 统一了所有字符的编码,是字符集,而字符集只是给所有字符一个唯一的编码;
    • Unicode 没有规定如何存储字符
    • UTF-32:一个字符使用四个字节存储,也就是32位,涵盖了Unicode 的所有字符;
    • UTF-8:变长编码,8位一组表示Unicode 字符格式

    UTF-32 规则简单,但是缺陷明显,对一个西文字母,UTF-32 是ASCII 花费空间的四倍 (ASCII 每个字符只需要一个字节存储)。

    UTF-8 的编码规则如下(U+ 后面的数字代表 Unicode 字符代码):

    U+ 0000 ~ U+ 007F: 0XXXXXXX
    U+ 0080 ~ U+ 07FF: 110XXXXX 10XXXXXX
    U+ 0800 ~ U+ FFFF: 1110XXXX 10XXXXXX 10XXXXXX
    U+10000 ~ U+1FFFF: 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX

    可以看到,UTF-8 通过开头的标志位位数实现了变长。对于单字节字符,只占用一个字节,实现了向下兼容 ASCII,并且能和 UTF-32 一样,包含 Unicode 中的所有字符,又能有效减少存储传输过程中占用的空间

    相关文章

      网友评论

          本文标题:[Java NIO]Java 字符集

          本文链接:https://www.haomeiwen.com/subject/gprlrktx.html