• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            逛奔的蝸牛

            我不聰明,但我會很努力

               ::  :: 新隨筆 ::  ::  :: 管理 ::
            @import url(http://www.shnenglu.com/cutesoft_client/cuteeditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

            最低位地址存放高位字節(jié),可稱高位優(yōu)先,內(nèi)存從最低地址開始按順序存放(高數(shù)位數(shù)字先寫)。最高位字節(jié)放最前面。

            例如“漢”字的Unicode編碼是6C49。如果將6C寫在前面,就是big endian。還是將49寫在前面,就是little endian


            Endian可讀為字節(jié)序.


            0x11BB,高字節(jié)為11,低字節(jié)為BB

            Big Endian: 高字節(jié)存儲在高位,低字節(jié)存儲在低位: 高字節(jié)結(jié)束存儲: BB 11

            Little Endian: 高字節(jié)存儲在低位,低字節(jié)存儲在高位: 低字節(jié)結(jié)束存儲: 11 BB

            數(shù)字的高低位與存儲中位置偏移的高低位正好相反. Little Endian更適合閱讀,因為11BB存儲為11BB.

            import java.nio.ByteOrder;

            public class Test {

                public static void main(String[] args) {

                    char c = '\u11BB';

                    String endian = Integer.toHexString(c & 0xFF).toUpperCase();

                    System.out.println(endian.equals("BB") ? "Little Endian" : "Big Endian");

                    System.out.println(ByteOrder.nativeOrder());

                }

            }

             


            BOM(字節(jié)序標(biāo)志): Byte Order Mark

            UTF-16是以兩個字節(jié)為編碼單元,要考慮字節(jié)序,所以使用BOM來標(biāo)志字節(jié)序: FEFF or FFFE.

            FEFF 又叫做 Zero Witdh No-Break Space,它在UCS中是不存在的字符,所以用來標(biāo)志字節(jié)序,又稱做BOM.

            FEFF: Big Endian

            FFEF: Little Endian

            A: The following table summarizes some of the properties of each of the UTFs. 

            NameUTF-8UTF-16UTF-16BEUTF-16LEUTF-32UTF-32BEUTF-32LE
            Smallest code point 0000 0000 0000 0000 0000 0000 0000
            Largest code point 10FFFF 10FFFF 10FFFF 10FFFF 10FFFF 10FFFF 10FFFF
            Code unit size 8 bits 16 bits 16 bits 16 bits 32 bits 32 bits 32 bits
            Byte order N/A <BOM> big-endian little-endian <BOM> big-endian little-endian
            Fewest bytes per character 1 2 2 2 4 4 4
            Most bytes per character 4 4 4 4 4 4 4

             

            Windows保存的Unicode文件是含有BOM的,UTF-8編碼的文件以字節(jié)為編碼單元,不存在字節(jié)序的問題,但可以使用BOM來表示編碼方式: 文件前3字節(jié)是EF BB BF,為UTF-8編碼。因為FEFF在UTF-8里的編碼為EF BB BF.

            Mac下的TextEdit保存為UTF-8就不含BOM

            TextWrangler可以選擇是否包含有BOM

             


            一個漢字在Unicode中用兩個字節(jié)表示,a-z等字母也是兩個字節(jié)。

            UTF-8是Unicode的一種表現(xiàn)形式(Unicode編碼值使用UTF-8方式編碼存儲),是一種變長的表達(dá)方式,把字符的Unicode編碼在文件中表現(xiàn)出來,從一個字節(jié)到三個字節(jié)不等(為了減少如a-z等ascii碼字符占用的空間,因為他們出現(xiàn)太頻繁了).

            UTF-8編碼范圍為:

            0000 - 007F : 0xxxxxxx

            0080 - 07FF : 110xxxxx 10xxxxxx

            0800 - FFFF : 1110xxxx 10xxxxxx 10xxxxxx

            如"漢"的Unicode編碼為6C49,在0800 - FFFF之間,所以要使用3字節(jié)模板: 1110xxxx 10xxxxxx 10xxxxxx

            6C49的二進制是: 0110 110001 001001

            用這個二進制流依次代替3字節(jié)模板中的x得: 1110 0110 10110001 10001001,即E6 B1 89

            保存到文件中的就是3個字節(jié)E6 B1 89,而不是2個字節(jié)6C 49


            // 給InputStreamReader指定要讀取的文件的編碼,讀取時就不會出現(xiàn)亂碼了.

             

            public class TextFileReader {

                public static void main(String[] args) throws Exception {

                    String filename = "source/demo-gb18030.txt";

                    String encoding = "gb18030";

                    printFile(filename, encoding);

                }


                // 打印出文件的文本內(nèi)容, 使用指定的編碼讀入文件

                public static void printFile(String filename, String encoding) throws IOException {

                    InputStreamReader isr = new InputStreamReader(new FileInputStream(filename), encoding);

                    BufferedReader reader = new BufferedReader(isr);

                    String line = null;

                    while ((line = reader.readLine()) != null) {

                        System.out.println(line);

                    }

                }

            }

            posted on 2010-12-29 06:27 逛奔的蝸牛 閱讀(2608) 評論(4)  編輯 收藏 引用 所屬分類: Java

            評論

            # re: Java:讀取文件不亂碼 2011-06-19 17:17 秦旭
             @r X? 貄D 恤 X? @r ? 攥D ? 5 ?? 8? ? @r 愻 貄D ? 愻 @r 狊 ZB ?@? 貙 €[B  ?  場  $ 綁 h珼 ? 輷A l B 睂B  ? 悒D 綁 D 〥 L? 〥 綁 0?   @r 潤 z$B + ?  趔 4囇w?Au_Client   瞳很 0?  \? 堁w 瘕\? Z堁w? *堁w ?     ? ? 狋 ?詗0堁w*堁w爭襴  ? + ?  靰z 珟襴+  聶 ;"揬笩 333333333333333333333333333333搢"搢?搢?搢劵 I 埢 h? s鋻|?  "搢 8  ? 痿  4? 閽|(搢"搢?搢?搢橑 愾 `? $? ? h? 閽|(搢"搢?搢?搢  贈 vS 堳 銙襴貆z + ?  H倆 怎 !詗? + 磅 Z?R@?   @r X? 貄D 恤 X? @r ? 攥D ? 5 ?? 8? ? @r 愻 貄D ? 愻 @r 狊 ZB ?@? 貙 €[B  ?  場  $ 綁 h珼 ? 輷A l B 睂B  ? 悒D 綁 D 〥 L? 〥 綁 0?   @r 潤 z$B + ?  趔 4囇w?Au_Client_5?  瞳很 0?  \? 堁w 瘕\? Z堁w? *堁w ?     ? ? 狋 ?詗0堁w*堁w爭襴  ? + ?  靰z 珟襴+  聶 ;"揯鏢 -99933333333333333333333333333搢"搢?搢?搢劵 I 埢 h? s鋻|?  "搢 8  ? 痿  4? 閽|(搢"搢?搢?搢橑 愾 `? $? ? h? 閽|(搢"搢?搢?搢  贈 vS 堳 銙襴貆z + ?  H倆 怎 !詗? + 磅 Z?R@?  回復(fù)  更多評論
              

            # re: Java:讀取文件不亂碼 2012-05-15 01:35 Lory
            謝了  回復(fù)  更多評論
              

            # re: Java:讀取文件不亂碼 2012-05-15 01:35 Lory
            博主很謙虛,一定是個高手  回復(fù)  更多評論
              

            # re: Java:讀取文件不亂碼 2012-10-19 10:53
            可以解決亂碼問題(*^__^*)   回復(fù)  更多評論
              

            久久天天躁狠狠躁夜夜2020 | 国产99久久久国产精品~~牛| 亚洲精品无码久久千人斩| 亚洲精品高清国产一线久久| 久久久久高潮毛片免费全部播放| 99久久综合国产精品二区| 久久久久久无码国产精品中文字幕 | 久久亚洲国产精品成人AV秋霞| 亚洲欧美日韩中文久久| 久久精品国产亚洲网站| 狠狠色丁香婷婷久久综合| 久久精品国产亚洲精品2020| 久久久久久亚洲精品无码| 久久香蕉超碰97国产精品| 色婷婷久久久SWAG精品| 久久久久国产精品麻豆AR影院| 77777亚洲午夜久久多人| 久久无码AV中文出轨人妻| 成人妇女免费播放久久久| 亚洲国产精品无码成人片久久| 中文字幕亚洲综合久久2| segui久久国产精品| 精产国品久久一二三产区区别 | 7777久久久国产精品消防器材| 亚洲综合婷婷久久| 国产V综合V亚洲欧美久久| 狠狠色丁香久久婷婷综合| 久久se精品一区二区影院 | 色婷婷综合久久久久中文字幕| 久久国产亚洲精品无码| 午夜精品久久久久久久| 色狠狠久久综合网| 亚洲午夜无码久久久久| 亚洲欧美日韩精品久久亚洲区| 中文字幕人妻色偷偷久久| 伊人色综合久久天天人守人婷| 欧美成a人片免费看久久| 久久免费99精品国产自在现线| 久久WWW免费人成—看片| 国产精品成人久久久久久久| 亚洲欧美精品伊人久久|