看板 java 關於我們 聯絡資訊
這個狀況是兩個問題造成的。 必要知識: http://en.wikipedia.org/wiki/Byte_order_mark ※ 引述《airizumo ( 歐巴馬)》之銘言: : 想請問各位先進 : 我有一個檔案(utf-8)用ultra打開看到的是 : FF FE 54 00 4F 00 4F 00 4C 00 .... => TOOL... wiki 上說 FF FE 開頭的是 UTF-16 (LE),接著的 TOOL 也再次證實。 我不熟 UltraEdit,但這看起來似乎是它幫你做了 UTF-8 轉 UTF-16 (LE) 的動作。 所以你看到的 hex 並不是真正的原始資料。 : 但用byte[]讀取檔案字串時 : byte[] content : for(int i=0;i<content.length;i++){ : s2 = s2 + String.valueOf(Integer.toHexString(b[i]))+ " "; : } : 最後的讀出來的卻是 : ffffffef ffffffbb ffffffbf 54 4f 4f 4c .... 再次參看 wiki,得知 UTF-8 的 BOM 應為: EF BB BF 與你的結果對照,只差在這些 byte 前面都多了 ffffff。 java 的 byte 型態是 signed byte,範圍在 -128 ~ 127 之間, 當你的值落在 0x80 ~ 0xFF 之間時,會被視為負數, 所以會顯示這樣的結果並不意外。 : 想請問一樣是show出每一個byte結果卻會有一段落差?? : 另外想請問若我用byte[] 讀取ANSI檔案後有辦法將裡面的byte轉成相對應的utf-8編碼嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.78.231 ※ 編輯: tkcn 來自: 140.114.78.231 (02/07 01:14)
sbrhsieh:UltraEdit 開啟utf8編碼的文件是使用unicode編輯 02/07 23:55