String.getBytes(“Unicode”)的疑問 以及 SHIFT-JIS編碼範圍

來源:互聯網
上載者:User

String.getBytes(charsetName),這個方法很多人都用過,可是有沒有試過temp.getBytes("Unicode");這樣的用法,它的傳回值很奇怪,第1和第2個位元組是-1或-2,比如下面的代碼,你能想象出它的結果嗎?     

        String temp = "a";

        try {

            byte[] unicodes = temp.getBytes("Unicode");

            System.out.println("unicodes=" + unicodes.length);
            for (int i = 0; i < unicodes.length; i++) {
                System.out.println(unicodes[i]);
            }

            unicodes = temp.getBytes("UnicodeLittleUnmarked");
            System.out.println("unicodes=" + unicodes.length);
            for (int i = 0; i < unicodes.length; i++) {
                System.out.println(unicodes[i]);
            }
           
            unicodes = temp.getBytes("UnicodeBigUnmarked");
            System.out.println("unicodes=" + unicodes.length);
            for (int i = 0; i < unicodes.length; i++) {
                System.out.println(unicodes[i]);
            }

        } catch (UnsupportedEncodingException e) {           
            e.printStackTrace();
        }

輸出結果:

unicodes=4
-1
-2
97
0
unicodes=2
97
0
unicodes=2
0
97

為什麼會有這種結果呢?藍色的返回了四個位元組,-1,-2,是位元組順的一種表示,這是由sun的類庫實現,指示如果沒有指定位元組就使用預設的UnicodeLittle(在Window平台,別的平台我沒測試),但為了標識這種位元組順,就使用了-1,-2在前面表示。

黑色的字,是UnicodeLittleUnmarked的結果,其返回位元組只是兩個位元組,這與Unicode的編碼相符合,注意到97,0與使用Unicode時後兩個位元組順序一樣。

紅色的字,是使用UnicodeBigUnmarked的結果,位元組順與Little相反,也沒有-1,-2.

由以上應該知道,temp.getBytes("Unicode");應該小心使用,應該注意它返回的-1,-2,這兩
個位元組,因為在一些網路程式中,特別是當對方是由java以外的語言編寫,有可能不會使用這種方式來標識位元組順,因此要瞭解對方的細節,這樣才能保證資料
的準確傳遞。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

想把一個檔案中的日文部分提取出來,可是其他的東西都不知道是什麼,好在還能查到SHIFT-JIS編碼的範圍。有個範圍怎麼著還是能將就是把文字提出來,只是沒有格式罷了。轉自:http://blog.csdn.net/walacewang/archive/2006/03/03/614382.aspx

Shift_JIS是一個日本電腦系統常用的編碼錶。它能容納全形及半形拉丁字母、平假名、片假名、符號及日語漢字。

它被命名為Shift_JIS的原因,是它在放置全形字元時,要避開原本在0xA1-0xDF放置的半形假名字元。

在微軟及IBM的日語電腦系統中,即使用了這個編碼錶。這個編碼錶稱為CP932。

位元組結構
以下字元在Shift_JIS使用一個位元組來表示。

ASCII字元 (0×20-0×7E),但”\”被\\”¥”取代
ASCII控制字元 (0×00-0×1F、0×7F)
JIS X 0201標準內的半形標點及片假名(0xA1-0xDF)
在部分作業系統中,0xA0用來放置”不換行空格\\”。
以下字元在Shift_JIS使用兩個位元組來表示。

JIS X 0208字集的所有字元

“第一位位元組\\”使用0×81-0×9F、0xE0-0xEF (共47個)
“第二位位元組\\”使用0×40-0×7E、0×80-0xFC (共188個)

使用者定義區

“第一位位元組\\”使用0xF0-0xFC (共47個)
“第二位位元組\\”使用0×40-0×7E、0×80-0xFC (共188個)

在Shift_JIS編碼錶中,並未使用0xFD、0xFE及0xFF。

在微軟及IBM的日語電腦系統中,在0xFA、0xFB及0xFC的兩位元組地區,加入了388個JIS X 0208沒有收錄的符號和漢字。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.