[心得]在Flash中寫入UTF-8格式

筆者最近試著把文字用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));    
}

參考文章:

http://www.websina.com/bugzero/kb/unicode-bom.html

http://zh.wikipedia.org/wiki/UTF-8

0 意見 :: [心得]在Flash中寫入UTF-8格式