<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-199  評(píng)論-203  文章-11  trackbacks-0
     Java是使用Unicode字符集的,意思是在內(nèi)存運(yùn)行的時(shí)候是這樣的。當(dāng)Java源程序被編譯為.class文件的時(shí)候,是以UTF-8字符集存儲(chǔ)字符的。比如字符串"漢語(yǔ)"的Unicode字符為:0x49 6C ED 8B。在.class文件中則變成了:0xE6 B1 89 E8 AF AD 0D 0A。實(shí)際上如果用以下程序輸出“漢語(yǔ)”二個(gè)字的16進(jìn)制字節(jié)序列:

            String str = "漢語(yǔ)";
                

     

            try{
    byte[] b = str.getBytes("Unicode");
    for(int i : b){
    System.out.println(Integer.toHexString(i));
    }       
    }catch(Exception ex){
    ex.printStackTrace();  }

        會(huì)發(fā)現(xiàn),實(shí)際輸出的是 0xFE FF 6C 49 8B ED。多出來(lái)的0xFE FF,是Unicode字符串的BOM(Byte Order Mark)。但是為什么輸出的順序(0xFE FF 6C 49 8B ED)和文件中的順序不一致(0xFF FE 49 6C ED 8B)?

        public byte[] getBytes(Charset charset) 使用指定的字符集將此 String 解碼為字節(jié)序列,并將結(jié)果存儲(chǔ)到一個(gè)新的字節(jié)數(shù)組中。如果不指定參數(shù),則使用系統(tǒng)默認(rèn)的字符集,對(duì)于簡(jiǎn)體中文系統(tǒng)一般為GBK。

        看程序:

    class EncodingExer 
    {
    public static void main(String[] args)
    {
    String str = "漢語(yǔ)";               //GBK編碼為: 0xBABA 0xD3EF
    byte[] b = str.getBytes();     
    for(int i : b){
    System.out.println(Integer.toHexString(i)); //0xBA 0xBA 0xD3 0xEF
    }    }}

        在這個(gè)過(guò)程中,由Unicode字符得到字符串“漢語(yǔ)”,然后解碼得到了GBK字節(jié)序列。與String.getBytes()相對(duì)應(yīng)的是new String(byte[] bytes,Charset charset),它的作用是用字節(jié)序列生成字符串。如果想由剛才的GBK字節(jié)序列得到原來(lái)的字符串“漢語(yǔ)”,我們需要做的是:new String(b) 就可以了。將b按照GBK編碼得到字符串“漢語(yǔ)”,然后轉(zhuǎn)化為Unicode字符。如果是str.getBytes("iso-8859-1"),那么還原的時(shí)候就是new String(b,"iso-8859-1")??傊褪怯檬裁捶绞骄幋a,就用什么方式解碼。

    posted on 2009-05-06 20:11 Werther 閱讀(1475) 評(píng)論(4)  編輯  收藏 所屬分類: 10.Java

    評(píng)論:
    # re: 淺談Java中的編碼理論[未登錄] 2009-05-06 22:28 | Dennis
    最後兩句是錯(cuò)的
    str.getBytes("iso-8859-1") 時(shí)會(huì)出現(xiàn)永久性單向的 data lost, 不可能還原  回復(fù)  更多評(píng)論
      
    # re: 淺談Java中的編碼理論[未登錄] 2009-05-08 07:30 | shaofan
    "但是為什么輸出的順序(0xFE FF 6C 49 8B ED)和文件中的順序不一致(0xFF FE 49 6C ED 8B)?"

    樓主第二段的這句話中,后面的這段編碼應(yīng)該是第一段提到的“UNICODE”的編碼,而非文件中的編碼,因?yàn)榘礃侵魉f(shuō),文件中的編碼是UTF-8?

    另外,看了一遍還是沒有明白為什么它們的輸出的順序不一致,樓主能否解釋一下?

    謝謝。  回復(fù)  更多評(píng)論
      
    # re: 淺談Java中的編碼理論 2009-05-10 16:15 | luhua
    樓主能否在講一些java的編碼知識(shí),謝謝了  回復(fù)  更多評(píng)論
      
    # re: 淺談Java中的編碼理論[未登錄] 2009-05-12 14:54 | xxx
    主站蜘蛛池模板: 国产免费av片在线播放| 成人免费在线观看网站| 自拍偷自拍亚洲精品情侣| 牛牛在线精品观看免费正| 暖暖在线日本免费中文| 亚洲精品第一国产综合亚AV| AV免费网址在线观看| 亚洲视频在线观看2018| 最近中文字幕无吗免费高清 | 精品香蕉在线观看免费| 亚洲精品午夜在线观看| 老司机午夜精品视频在线观看免费 | 亚洲成a人片7777| 永久在线观看www免费视频| 亚洲天堂电影在线观看| 99久久久精品免费观看国产| 亚洲 日韩 色 图网站| 成全视频在线观看免费高清动漫视频下载 | 亚洲А∨精品天堂在线| 亚洲免费一区二区| 午夜寂寞在线一级观看免费| 亚洲精品永久在线观看| 亚洲AV无码专区日韩| www在线观看播放免费视频日本| 亚洲午夜久久久久妓女影院| 日韩在线永久免费播放| 精品国产日韩久久亚洲| 四虎永久免费影院| 曰批全过程免费视频在线观看无码| 亚洲影院在线观看| 在线jyzzjyzz免费视频| eeuss影院免费92242部| 亚洲人成影院在线| 国产在线19禁免费观看国产| 亚洲精品偷拍视频免费观看| 亚洲制服丝袜一区二区三区| 内射无码专区久久亚洲| 91av免费观看| 美女黄色毛片免费看| 亚洲四虎永久在线播放| 日韩免费在线观看|