a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 155|回复: 0

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

[复制链接]
发表于 2012-8-4 12:44:44 | 显示全部楼层 |阅读模式
Java认证之Java中编码以及Unicode总结(9)+ R$ m/ |' \/ t$ U. p
 6、6 a( {2 m6 k4 K; w7 H! ^+ s9 ~5 o
  常见问题
2 z% x+ k' L# g4 I3 ~  q  6.1 通用UTF-8来编码
8 U0 H: S9 W1 d; P; i  大量使用国外的开源软件时,UTF-8才是编码界最通用的语言。对英文是单字节、中文是三字节。在大量的英文存在的情况下高效。
  m: N( Z. h, L9 a  6.2编码问题时查看
' a$ Z9 X8 K0 Z2 p  %javahome%/jre/lib/charsets.jar
4 c# k. x: C# C; H0 |  6.3 语言的编码0 j2 V/ m* W( M9 g6 s2 b
  C、C++、Python2内部字符串都是使用当前系统默认编码。6 y* l8 u+ s0 G8 ~5 [
  Python3、Java内部字符串用Unicode保存。, D( E1 u, p4 Y
  Ruby有一个内部变量$KCODE用来表示可识别的多字节字符串的编码,变量值为”EUC” “SJIS” “UTF8″ “NONE”之一。$KCODE的值为”EUC”时,将假定字符串或正则表达式的编码为EUC-JP。同样地,若为”SJIS”时则认定为Shift JIS。若为”UTF8″时则认定为UTF-8。若为”NONE”时,将不会识别多字节字符串。在向该变量赋值时,只有第1个字节起作用,且不区分大小写字母。”e” “E” 代表”EUC”,”s” “S” 代表 “SJIS”,”u” “U” 代表 “UTF8″,而”n” “N” 则代表 “NONE”。默认值为”NONE”。即默认情况下Ruby把字符串当成单字节序列来处理。
3 g6 d1 o0 Y/ A+ {- d5 I# W# r  6.4 js的unicode
0 Z0 f0 B0 ~% _9 ^$ d: x  13% |; n8 @, `3 ?$ x- k: I; D' f+ R
  6.5 网页编码
+ D1 N* {, l- K: n* z  一个网页要在浏览器中正常显示,需要保持网页文件的编码、网页的meta标签声明(charset 来制定的其实是encoding编码而不是字符集)、浏览器编码设置是一致的。
; M7 Y# \8 D( ?: M! @  6.6 联通乱码+ A0 J$ U: V& V8 u( [
  在Win下的新建一个记事本文件,输入”联通”两个字之后,保存之后重新打开,发现出现乱码。这是因为GBK编码与UTF8编码产生了编码冲突。8 I9 p$ ~  I9 Z, u5 Z: J
  从UNICODE到UTF8的转换规则:
4 \# C$ S. ~& b* k9 R1 |& q  Unicode UTF-8
6 N1 f/ D! g, M4 H7 v  0000 – 007F 0xxxxxxx+ ?! |; P3 m  a
  0080 – 07FF 110xxxxx 10xxxxxx" s* O0 _' z' V& A: w' m
  0800 – FFFF 1110xxxx 10xxxxxx 10xxxxxx9 R+ D" `, f- U* X) n# o# P
联的Unicode编码是[0x80] [0x54]
( }8 @  H: L" `5 ~9 r  通的Unicode编码是[0x90] [0x1A]
5 O9 L" L) d4 ]5 j) s& i# U4 f  8054和901A在0800-FFFF之间,所以要用3字节模板:1110xxxx 10xxxxxx 10xxxxxx。使用第三种转换得到
  Z: z7 i1 x: n. j/ E  @  [0xE8] [0x81] [0x94] [0xE9] [0x80] [0x9A],这就是其UTF8的编码。
' }5 [2 o! Y1 ]2 W  新建一个文本文件时,记事本的编码默认是ANSI, 中文的就是GBK编码,而,此时”联通”的内码是:[0xC1] [0xAA] [0xCD] [0xA8]# o$ P( Z, Q+ `" t& R! @8 V6 E
  C1 1100 0001* l1 i# X- k# N
  AA 1010 1010& h3 j- g. c4 T; T! A+ _- @
  CD 1100 1101
' B1 W0 |# [/ M8 {. l, k$ s  A8 1010 1000) q8 A: ?" k3 O
  其中联的两个字节、通的两个字节的起始部分的都是”110″和”10″,与UTF8规则里的两字节模板是一致,所以再次用记事本打开时,记事本误认为这是一个UTF8编码的文件。按照反编码得到UNICODE的0x 006A,和0×0368,0×0368这个字符什么也不是,这就是”联通”两个字的文件没有办法在记事本里正常显示的原因。如果多几个字的输入话,由于记事本检测到不是合格的uft-8编码的字节转而会采用GBK,乱码又不出现。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-27 23:47 , Processed in 0.206003 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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