Java认证:Java中编码以及Unicode总结(8)
11字节序
按照字节序的分歧,UTF-16可以被实现为UTF-16LE或UTF-16BE,UTF-32可以被实现为UTF-32LE或UTF-32BE。例如:
Unicode编码 ║ UTF-16LE ║ UTF-16BE ║ UTF32-LE ║ UTF32-BE
0×006C49 ║ 49 6C ║ 6C 49 ║ 49 6C 00 00 ║ 00 00 6C 49
0×020C30 ║ 43 D8 30 DC ║ D8 43 DC 30 ║ 30 0C 02 00 ║ 00 02 0C 30
BOM
那么,怎么判定字节约的字节序呢?Unicode尺度建议用BOM(Byte Order Mark)来区分字节序,即在传输字节约前,先传输被作为BOM的字符”零宽无间断空格”。这个字符的编码是FEFF,而反过来的FFFE(UTF- 16)和FFFE0000(UTF-32)在Unicode中都是不决义的码位,不应该呈此刻现实传输中。下表是各类UTF编码的BOM:
UTF编码 ║ Byte Order Mark
UTF-8 ║ EF BB BF
UTF-16LE ║ FF FE
UTF-16BE ║ FE FF
UTF-32LE ║ FF FE 00 00
UTF-32BE ║ 00 00 FE FF
5、
java中使用的Unicode
5.1 内部编码
Java中,字符只以一种形式存在,那就是JVM内部的内部暗示,Unicode码编号(U+0000~U+10FFFF)。JVM的独一确定一个字符使得一个编码在进入jvm或者从jvm输出时需要进行编码转换。也就是编码转换只发生在JVM和OS以及收集传输的交互地带,也就是IO的各类 byte或者 reader/writer输入输出发生浸染的处所。在JVM和OS以及收集流交互的时刻,Reader和Writer只是合用默认编码进行了默认的编码转换,来转换为字符流。面向字符是指系统文件中的字符和内存中的要一致。而面向字节是要保证系统中的二进制内容和读入JVM内部的二进制内容要一致。
Java认证:Java中编码以及Unicode总结(8)
</p> 5.2 utf-16总共17个平面
0×0000~0×10FFFF 1114112-2048=1112064个码位
Unicode已界说的码位是238605个
平面15之界说了占65534个码位的专用区,0xF0000~0xFFFFD。
平面16之界说了占65534个码位的专用区,0×100000~0×10FFFD。
平面0中界说了6400个专有区,0xE0000~0xF8FF。
238605-65534*2-6400-2408=99089余下的分布在平面0、1、2、14上。
12
平面0上界说了52080个字符;
平面1上界说了3419个字符;
平面2上界说了43253个字符;
平面14上界说了337个字符。
平面2的43253个字符都是汉字,平面0上界说了27973个汉字。
根基平面 0×0000~0xFFFF
1~14平面 0×10000~0xEFFFF 0xD800~0xDBFF高位 DCOO~DFFF低位
15平面 0xF0000~0xFFFFF 0xDB80~0xDBBF高位 DCOO~DFFF低位
16平面 0×100000~0×10FFFF 0xDBC0~0xDBFF高位 DCOO~DFFF低位
5.3高位序列和低位序列的判定
java.lang.String#getBytes(String) 的源代码
java.lang.StringCoding.encode 的源代码,再经由过程其底层类库的字符集类sun.io.CharacterEncoding 可以找出 Unicode 的转换器,是采用sun.io.CharToByteUnicode 这个类的,这个类的 sun.io 包是篡夺file.encoding.pkg 这个系统属性拼接字符串反射而来的。
页:
[1]