筆者最近試著把文字用writeUTFBytes的方式寫成檔案,雖然用文字編輯器讀取不會有問題,但如果再以Flash的URLLoader方式載入,文字會變成亂碼,且無法轉成XML物件,找了半天才發現問題出在BOM上
BOM(Byte Order Mark)簡單來說就是unicode的簽名檔,表明該文件是以什麼方式編碼的,由於Flash的writeUTFBytes並不會寫入BOM,所以在讀取時就很容易變成亂碼,為了避免這點,只要在寫入檔案時自行加上BOM即可,目前可加入的BOM類型如下:
Bytes | 編碼 |
---|---|
00 00 FE FF | UTF-32, big-endian |
FF FE 00 00 | UTF-32, little-endian |
FE FF | UTF-16, big-endian |
FF FE | UTF-16, little-endian |
EF BB BF | UTF-8 |
寫個簡單範例,UTF-8
//UTF-8 BOM byteArray.writeByte(0xEF); byteArray.writeByte(0xBB); byteArray.writeByte(0xBF); //文字 byteArray.writeUTFBytes(message);
也可以寫成UTF-16,但要注意endian格式應對應
//UTF-16 BOM big-endian byteArray.writeByte(0xFE); byteArray.writeByte(0xFF); byteArray.endian = Endian.BIG_ENDIAN; //文字 var messageNum:uint = message.length; for (var i:int = 0; i < messageNum; i++) { byteArray.writeShort(message.charCodeAt(i)); }
參考文章:
0 意見 :: [心得]在Flash中寫入UTF-8格式
張貼留言