1. 程式人生 > >在windows下另存為Ascii檔案和unicode檔案的問題

在windows下另存為Ascii檔案和unicode檔案的問題

"劉"字                 GBK 編碼為 0xC1F5 UNICODE(小端)編碼為   0x5218 在windowsXP下用記事本寫"劉"字,分別另存為ANSI編碼方式,以及unicode編碼方式。 用ultraedit開啟切換到十六進位制模式,發現 ANSI編碼儲存的檔案第一位元組為 C1 第二位元組是F5,貌似大端模式。難道WINDOWS下ANSI儲存的檔案是大端位元組流的? unicode編碼儲存的檔案則為 FF FE 18 52 則是小端模式。 網上看了一段解釋,引用過來 ============================================================================== http://group.gimoo.net/review/141528 16樓的問題:ANSI為啥是大端序呢?而不是Intel架構的都是小端序麼?  可能是因為多字符集編碼的特殊規定導致的,而不是真正的大端序。  看下面這段引文:  後來,由於各國語言的加入,ASCII已經不能滿足資訊交流的需要,因此,為了能夠表示其它國家的文字,各國在ASCII的基礎上制定了自己的字符集,這些從ANSI標準派生的字符集被習慣的統稱為ANSI字符集,它們正式的名稱應該是MBCS(Multi-Byte Chactacter System,即多位元組字元系統)。這些派生字符集的特點是以ASCII 127 bits為基礎,相容ASCII 127,他們使用大於128的編碼作為一個Leading Byte,緊跟在Leading Byte後的第二(甚至第三)個字元與Leading Byte一起作為實際的編碼。這樣的字符集有很多,我們常見的GB-2312就是其中之一。  例如在GB-2312字符集中,“連通”的編碼為C1 AC CD A8,其中C1和CD就是Leading Byte。前127個編碼為標準ASCII保留,例如“0”的編碼是30H(30H表示十六進位制的30)。軟體在讀取時,如果看到30H,知道它小於128就是標準ASCII,表示“0”,看到C1大於128就知道它後面有一個另外的編碼,因此C1 AC一同構成一個整個的編碼,在GB-2312字符集中表示“連”。  也就是說對於漢字的ANSI編碼而言,無所謂MSB, LSB。它就是把第一個位元組理解為Leading Byte,第二個位元組理解為另外的編碼,所以它們在記憶體裡的存放次序不能倒過來,否則就理解不對了。     劉小瑩回覆於19日07點28分  有時候我覺得你們有點頭腦不清楚,有時候我懷疑是自己頭腦不清楚。     霏霏媽媽回覆於19日07點37分  幾乎在所有的機器上,多位元組物件被儲存為連續的位元組序列,物件地址則是所使用的這些地址的最小地址。比如一個int型的變數i的地址是0x112,那麼x所佔的位元組可能是0x100、0x101、0x102、0x103。  大端法的英文名稱big endian,小端法的英文名稱為little endian。  小端法的儲存規則是從最低有效位元組到最高有效位元組的順序儲存物件,如上面的變數i的位表示法為0x1234567,則0x100儲存01,0x101儲存23,0x102儲存45,0x103儲存67。  大端法儲存的規則是從最高有效位元組到最低有效位元組的順序儲存物件,我們還拿i來舉例,那麼0x100儲存67,0x101儲存45,0x102儲存23,0x103儲存01。