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

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

Java中文問題詳解(轉)

2019-11-18 14:29:20
字體:
來源:轉載
供稿:網友

  我來說一下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     --{
     -- 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     --{
     -- 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);  ----


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 芜湖县| 鞍山市| 神池县| 广饶县| 锦屏县| 普兰县| 通州市| 中西区| 大丰市| 天台县| 新兴县| 云林县| 密云县| 龙胜| 高要市| 平昌县| 枣阳市| 凉城县| 布拖县| 拜泉县| 峨眉山市| 巴彦县| 万宁市| 乌海市| 逊克县| 沂水县| 阆中市| 子洲县| 昂仁县| 汤阴县| 龙门县| 翁牛特旗| 鄂尔多斯市| 南开区| 连南| 张家界市| 罗甸县| 武定县| 满城县| 聊城市| 民权县|