ByteArray に 'unicodeFFFE' を書き込む際のバグ
10/05/10 追記 10/05/10 現在の最新 version FlashPlayer 10.0.45.2 でのバグで、10.1 RC4 では FIX されています。
ByteArray.writeMultiByte() メソッドには 2 バイト文字の
処理に不具合があります。
utf-16 BE (BigEndian) を書き込んだ際の諸環境で起こるバグの症状の確認の為の
サンプルを wonderfl で書いてみました。
また、バグ対応のコードも合わせて確認します。
Windows FlashPlayer 10.0.45.2 plug-in/activeX
unicodeFFFE を指定したにもかかわらず shif_jis のキャラクタコードで書き込まれます。
Macintosh FlashPlayer 10.0.45.2 plug-in
2 バイト文字のみの間は utf-16 BE のキャラクタコードが正常に書き込まれますが、 1 バイト文字が混在すると以降のキャラクタコードが書き込まれません。
Linux FlashPlayer 10.0.45.2 plug-in
何も書き込まれません。
バグの対処法の解説
unicodeFFFE とは、utf-16 BE (BigEndian) なので
String.charCodeAt(index);で一文字ずつですが取得可能です。
utf-16 では 1 文字を 2 バイトもしくは 4 バイトで定義しています。
つまり、文字列を一文字ずつ走査し、
charCodeAt() メソッドでキャラクタコードを取得し、
0×0000 〜 0xFFFF の範囲なら writeShort() メソッドで
2 バイトとして書き込み、
0×00010000 〜 0xFFFFFFFF の範囲なら writeUnsignedInt() メソッドで
4 バイトとして ByteArray に書き込めばよいことになります。
// ただし、日本語の場合は第二水準漢字まで含めても 2 バイト内に収まります。
About this entry
You’re currently reading “ByteArray に 'unicodeFFFE' を書き込む際のバグ,” an entry on jp.ferv.blog
- Published:
- Mon, May 10th, 2010 at 8:39 AM
- Author:
- dsk
- Category:
- Web
- Tags:
- ActionScript 3.0, ByteArray, FlashPlayer, purePDF
No comments
Jump to comment form | comments rss | trackback uri