a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 115|回复: 1

[专业语言] Java认证:Java中编码以及Unicode总结(8)

[复制链接]
发表于 2012-8-4 12:44:44 | 显示全部楼层 |阅读模式
11/ n1 w7 |( [* S" K( `. b) ]
  字节序: w, h! t) F" N. G$ @
  按照字节序的分歧,UTF-16可以被实现为UTF-16LE或UTF-16BE,UTF-32可以被实现为UTF-32LE或UTF-32BE。例如:5 ?/ ?/ F7 ^9 G7 b6 f
  Unicode编码 ║ UTF-16LE ║ UTF-16BE ║ UTF32-LE ║ UTF32-BE
# i9 u# B" e+ C2 S  0×006C49 ║ 49 6C ║ 6C 49 ║ 49 6C 00 00 ║ 00 00 6C 499 P+ {% c9 {$ f6 M
  0×020C30 ║ 43 D8 30 DC ║ D8 43 DC 30 ║ 30 0C 02 00 ║ 00 02 0C 30
% O' d& K( f9 M1 [3 o( b0 O  BOM
# g! ~# D8 i! K( m& s9 N) y  那么,怎么判定字节约的字节序呢?Unicode尺度建议用BOM(Byte Order Mark)来区分字节序,即在传输字节约前,先传输被作为BOM的字符”零宽无间断空格”。这个字符的编码是FEFF,而反过来的FFFE(UTF- 16)和FFFE0000(UTF-32)在Unicode中都是不决义的码位,不应该呈此刻现实传输中。下表是各类UTF编码的BOM:0 u# R: f2 \2 Q6 _
  UTF编码 ║ Byte Order Mark( z/ K5 ]9 `5 S
  UTF-8 ║ EF BB BF- X9 K$ m" B% x' w/ ?, Z
  UTF-16LE ║ FF FE
: a) {9 A1 T+ k% t  UTF-16BE ║ FE FF/ @7 J% K; `; t0 |# Q6 ~( S
  UTF-32LE ║ FF FE 00 00
; L; }! W0 y: m0 k+ c4 M  UTF-32BE ║ 00 00 FE FF% a) g# \; _  ?0 a5 T+ Y# |4 e/ w
  5、1 c. c. V( N% l2 m8 d( P
  java中使用的Unicode9 `8 r" V7 @1 w/ l( X; R$ T. d7 u6 z
  5.1 内部编码
1 B$ d5 @0 u' G2 b0 T" g  s) Y! |/ \: |3 o
  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
+ k6 K4 _: x; ~9 m# n. F+ o  总共17个平面3 @- X3 V* h' M5 k9 H7 s/ c
  0×0000~0×10FFFF 1114112-2048=1112064个码位
. P, J& z$ ~* [3 W3 ?  Unicode已界说的码位是238605个
( l2 y$ J" Z. N, X5 ]  平面15之界说了占65534个码位的专用区,0xF0000~0xFFFFD。  P) [. K( d5 D
  平面16之界说了占65534个码位的专用区,0×100000~0×10FFFD。
' S- ~3 |4 a9 @0 }5 s* w: t) V- Y  平面0中界说了6400个专有区,0xE0000~0xF8FF。! Y) b$ v$ e! g
  238605-65534*2-6400-2408=99089余下的分布在平面0、1、2、14上。! i" I4 S8 O' Q% K5 W# t/ _; e/ k
  12
. M' u' B9 m& E, D* W* {  平面0上界说了52080个字符;
1 R2 [7 W; C5 N+ f! L2 w5 o  平面1上界说了3419个字符;
9 [) |; L" v9 j1 l  D$ o& D" ]  r6 [* ^  平面2上界说了43253个字符;7 K8 k) ~4 g# Y0 o: b& u
  平面14上界说了337个字符。' H* e( x2 E- v2 s* a  n7 r
  平面2的43253个字符都是汉字,平面0上界说了27973个汉字。
4 {- J: K) c& z" F8 i" Q3 O8 X  根基平面 0×0000~0xFFFF* p; `, t# k! n+ B4 d" P
  1~14平面 0×10000~0xEFFFF 0xD800~0xDBFF高位 DCOO~DFFF低位
% E7 I/ u+ S5 b# f  m: d  15平面 0xF0000~0xFFFFF 0xDB80~0xDBBF高位 DCOO~DFFF低位5 Y9 x- ~- U( o. N
  16平面 0×100000~0×10FFFF 0xDBC0~0xDBFF高位 DCOO~DFFF低位/ b7 a, L% q8 l. s8 j/ t+ V
  5.3高位序列和低位序列的判定
" W0 {/ q# Z/ L  i, l* F8 {  java.lang.String#getBytes(String) 的源代码/ B9 [1 b: @! n  ^
  java.lang.StringCoding.encode 的源代码,再经由过程其底层类库的字符集类sun.io.CharacterEncoding 可以找出 Unicode 的转换器,是采用sun.io.CharToByteUnicode 这个类的,这个类的 sun.io 包是篡夺file.encoding.pkg 这个系统属性拼接字符串反射而来的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-4-29 21:23 , Processed in 0.142375 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表