国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java中文問題詳解

2019-11-18 11:03:35
字體:
來源:轉載
供稿:網友

 

我來說一下tomcat如何實現jsp的你就明白了。
預備知識:
 1.字節和unicode
  java內核是unicode的,就連class文件也是,但是很多媒體,包括文件/流的保存方式
  是使用字節流的。 因此Java要對這些字節流經行轉化。char是unicode的,而byte是字節.
  Java中byte/char互轉的函數在sun.io的包中間有。其中ByteToCharConverter類是中調度,
  可以用來告訴你,你用的Convertor。其中兩個很常用的靜態函數是
   public static ByteToCharConverter getDefault() ;
   public static ByteToCharConverter getConverter(String encoding);
  假如你不指定converter,則系統會自動使用當前的Encoding,GB平臺上用GBK,EN平臺上用
  8859_1
  
  我們來就一個簡單的例子:
     "你"的gb碼是:0xC4E3 ,unicode是0x4F60
     你用:
     --encoding="gb2312";
     --byte b[]={(byte)'/u00c4',(byte)'/u00E3'};
     --convertor=ByteToCharConverter.getConverter(encoding);
     --char [] c=converter.convertAll(b);
     --for(int i=0;i<c.length;c++)
     --{
     -- System.out.PRintln(Integer.toHexString(c[i]));
     --}
     --打印出來是0x4F60
     --但是假如使用8859_1的編碼,打印出來是
     --0x00C4,0x00E3
     ----例1
     反過來:
     --encoding="gb2312";
        char c[]={'/u4F60'};
        convertor=ByteToCharConverter.getConverter(encoding);
     --byte [] b=converter.convertAll(c);
     --for(int i=0;i<b.length;c++)
     --{
     -- System.out.println(Integer.toHexString(b[i]));
     --}
      --打印出來是:0xC4,0xE3
      ----例2
      --假如用8859_1就是0x3F,?號,表示無法轉化      --
      很多中文問題就是從這兩個最簡單的類派生出來的。而卻有很多類  
  不直接支持把Encoding輸入,這給我們帶來諸多不便。很多程序難得用encoding
  了,直接用default的encoding,這就給我們移植帶來了很多困難
  --
  2.UTF-8
  --UTF-8是和Unicode一一對應的,其實現很簡單
  --
   -- 7位的Unicode: 0 _ _ _ _ _ _ _
  --11位的Unicode: 1 1 0 _ _ _ _ _ 1 0 _ _ _ _ _ _
  --16位的Unicode: 1 1 1 0 _ _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _
  --21位的Unicode: 1 1 1 1 0 _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _
  --大多數情況是只使用到16位以下的Unicode:
  --"你"的gb碼是:0xC4E3 ,unicode是0x4F60
  --我們還是用上面的例子
  --  --例1:0xC4E3的二進制:
  --  --    1 1 0 0 0 1 0 0 1 1 1 0 0 0 1 1
  --  --    由于只有兩位我們按照兩位的編碼來排,但是我們發現這行不通,
  --  --    因為第7位不是0因此,返回"?"
  --  --   
  --  --例2:0x4F60的二進制:
  --  --    0 1 0 0 1 1 1 1 0 1 1 0 0 0 0 0
  --  --    我們用UTF-8補齊,變成:
  --  --    11100100 10111101 10100000
  --  --    E4--BD-- A0
  --  --    于是返回0xE4,0xBD,0xA0
  --  --
  3.String和byte[]
  --String其實核心是char[],然而要把byte轉化成String,必須經過編碼。
  --String.length()其實就是char數組的長度,假如使用不同的編碼,很可
  --能會錯分,造成散字和亂碼。
  --例:
  ----byte [] b={(byte)'/u00c4',(byte)'/u00e3'};
  ----String str=new String(b,encoding);  ----
  ----假如encoding=885



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南丰县| 玛沁县| 贞丰县| 龙里县| 南京市| 吴堡县| 青田县| 如皋市| 阿克| 芜湖市| 泰来县| 兴业县| 哈尔滨市| 和静县| 淄博市| 阿克苏市| 临城县| 勃利县| 安宁市| 苏尼特右旗| 汶上县| 喀喇沁旗| 资源县| 沈阳市| 海南省| 尼玛县| 克拉玛依市| 大荔县| 阜平县| 佛学| 灵石县| 乌拉特后旗| 公安县| 克东县| 剑河县| 阿拉善右旗| 宜都市| 宜都市| 涟水县| 滦平县| 乃东县|