会计考友 发表于 2012-8-4 12:44:44

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内部的二进制内容要一致。

会计考友 发表于 2012-8-4 12:44:45

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]
查看完整版本: Java认证:Java中编码以及Unicode总结(8)