筆者最近試著把文字用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格式
張貼留言