FlashPlayerはVersion6以降はUTF-8。
故にShift-JISでエンコードされた外部テキストとか読み込んで
表示しようとすると文字化けしたりする。
つまりはFlashPlayerはあくまでもUTF-8でこのSystem.useCodepage = true をやることでそのOSの環境の方のエンコーディングになるわけです。(仮にOSがEUCだったらEUCが文字化けしない)
ちなみにバイナリデータが扱えるようになったFlashPlayer9以降では
こんな感じでByteArrayを使って文字コードの変換ができました。
故にShift-JISでエンコードされた外部テキストとか読み込んで
表示しようとすると文字化けしたりする。
System.useCodepage = true;とかすると文字化けしなくなるのは以下のAdobeのTechNoteにあるように
System.useCodepage という値を「true」にした場合、Flash Player 6 以降で扱うエンコーディング (UTF-8) はシステムに依存した形に切り替わり、日本語の Windows や Macintosh では、「Shift-JIS」となります。 ~ Adobe:TechNoteなにをいまさら的な話だけどSystem.useCodepage = trueをググったりしてShiftJISに文字コードコンバートできるのでは?的質問を時々受けるのが少々疲れるw
つまりはFlashPlayerはあくまでもUTF-8でこのSystem.useCodepage = true をやることでそのOSの環境の方のエンコーディングになるわけです。(仮にOSがEUCだったらEUCが文字化けしない)
ちなみにバイナリデータが扱えるようになったFlashPlayer9以降では
こんな感じでByteArrayを使って文字コードの変換ができました。
var bT:ByteArray = new ByteArray(); bT.writeMultiByte( str, "shift-jis" ); bT.position = 0; var s_sJis:String = bT.readMultiByte(bT.length, "shift-jis" );ちなみにByteArray.positionを0に戻すってのに最初気づかなかったです。
補足
UTF-8 → Shift-JISで文字化けする場合
["?"に文字化け]
UTF8にあってShift-JISにない文字なので"?"(16進数で3F)に変換されてしまう
["・"に文字化け]
Shift-JISに存在する文字だが機種依存文字。16進数では違いも確認できる。
例)WindowsにあってMacにない文字(マル1)など
UTF-8 → Shift-JISで文字化けする場合
["?"に文字化け]
UTF8にあってShift-JISにない文字なので"?"(16進数で3F)に変換されてしまう
["・"に文字化け]
Shift-JISに存在する文字だが機種依存文字。16進数では違いも確認できる。
例)WindowsにあってMacにない文字(マル1)など

コメントする