亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

一個關于Unicode字符編碼的奇怪問題

系統 2076 0

有一個學員問了一個關于 Unicode 字符編碼的奇怪問題。

問題如下:

String strChina = " 中國 ";

1 )直接把每個字符中的內容對應著的整數打印出來,顯示的結果就是這個字符的 Unicode 碼,則下面的代碼:

for(int i=0; i<strChina.length(); i++)

{

System.out.println(Integer.toHexString((int)strChina.charAt(i)));

}

打印出的結果是:

4e2d

56fd

2 )下面的代碼:

byte [] buf = strChina.getBytes("Unicode");

for(int i=0; i<buf.length; i++)

{

System.out.println(Integer.toHexString(buf[i]));

}

打印出的結果是:

ffffffff

fffffffe

2d

4e

fffffffd

56

打印出的“ ffffffff ”和“ fffffffe ”表示什么?“ 2d ”和“ 4e ”為什么和直接打印的結果是相反的?

回答如下:

在不同體系結構的計算機系統中, UTF-16 編碼的 Unicode 字符在內存中的字節存儲順序是不同的。使用 Intel CPU 的計算機中,一個多字節數據在內存中的存儲形式通常是:低字節在前,高字節在后,這種方式稱為 Little-Endian (最不重要的字節在先)。但是,在使用其他 CPU 的一些計算機中,又是以高字節在前,低字節在后的方式存儲多字節數據的,這種方式稱為 Big-Endian (最重要的字節在先)。對于 0x1234 這樣一個雙字節數據,使用 Little-Endian Big-Endian 兩種方式在內存中存儲的格式如圖 7.4 所示。

一個關于Unicode字符編碼的奇怪問題

<shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 285.75pt; HEIGHT: 164.25pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5Cflx%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.png" o:title=""></imagedata></shape>

對于采用 UTF-16 編碼的文件,通常都要用字節順序標記( Byte Order Mark ,簡稱 BOM )來說明文件中的字符所使用的字節存儲順序。如果文件以 0xFE 0xFF 這兩個字節開頭,則表明文本的其余部分是 Big-Endian UTF-16 編碼;如果文件以 0xFF 0xFE 這兩個字節開頭,則表明文本的其余部分是 Little-Endian UTF-16 編碼;如果文件開頭沒有使用任何字節順序標記,則暗指全部文本都是 Big-Endian UTF-16 編碼。

ffffffff ”和“ fffffffe ”實際上是 0xff 0xfe 的兩個字節,把他們當作整數打印時,就成了 4 個字節, 由于 0xfe 最高 bi t 位是 1 ,當它轉成 4 字節的整數時,前面 3 個字節的所有 bit 位都補 1, 結果就成了 0xfffffffe 。前面打印出:

ffffffff

fffffffe

2d

4e

fffffffd

56

實際上是:

ff

fe

2d

4e

fd

56

前兩個字節是在說字節存儲順序!

一個關于Unicode字符編碼的奇怪問題


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久久久欧美国产精品 | 97国产精品视频观看一 | 久久99精品久久久久久久野外 | 69成人做爰视频在线观看 | 中文字幕亚洲国产 | 一级毛片一级毛片一级级毛片 | 国产福利影院在线观看 | 欧美一级毛片免费大片 | 欧美成人综合在线 | 成年性午夜免费视频网站不卡 | 亚洲成人免费视频在线 | 四虎最新永久免费视频 | 一区二区亚洲精品 | 久久精品香蕉视频 | 亚洲在线网站 | 国产玖玖在线 | 97精品国产手机 | 四虎成人在线视频 | 久热草| 香蕉爱视频 | 国产精品亚洲玖玖玖在线靠爱 | 欧美成人在线免费观看 | 亚洲专区欧美专区 | 在线综合视频 | 国产精品久久久久久久久齐齐 | 亚洲精品中文字幕乱码三区一二 | 国产一区二区三区日韩欧美 | 亚洲精品老司机综合影院 | 91孕妇精品一区二区三区 | 欧美大片日韩精品四虎影视 | 亚洲欧美一区二区三区在饯 | 亚洲欧美日韩综合二区三区 | 在线第一福利视频观看 | 欧美激情(一区二区三区) | 精品欧美一区二区在线看片 | 欧美久久久久欧美一区 | 老司机精品视频个人在观看 | 日韩欧美高清在线观看 | 99热久久国产精品免费观看 | 91福利社在线观看 | 久久日韩在线 |