Flexでターミナルのマルチバイトの件

入力(Telnet) --> デコーダバッファ --(十分=1文字分データが溜まったら) --> 文字を出力
という流れで。ただし、デコーダバッファにデータを入れるとき、デコーダバッファが空 && 入力が127以下なら、シングルバイト文字として扱う。逆にデータバッファが空 && 入力が128以上なら、マルチバイト文字と判断して、2バイト以上データが溜まらないとデコードを行わないようにする。


これでちょっと試してみたところ、UTF-8EUC-JP、Shift_JISEBCDIC-JapaneseAndKanaが通ることが分かった。EBCDICはネタ。ISO2022-JPは勘弁。
一方でUTF-16UTF-32は通らない。UTF-32Flexがそもそも対応していないのでしょうがない。UTF-16は、サロゲートペアを無視するなら、入力が127以下ならシングルバイトとして扱うコードを外せば通ると思う。だけどサロゲートペアがあるのでー…UTF-16はどうせ使わないかなーと。


ところでActionScriptのStringクラスで、charCodeAt()メソッドの返り値が16ビットの整数らしいのだけど、これはUTF-16ということかな? ActionScriptに「文字型」が無いので、代わりに整数型を文字型の代用にしようと思ったのだけど、サロゲートペアをこっちで処理しないといけないのは面倒。サロゲートペアなんて無視だーという考えもアリ?でもまぁ素直にStringを使っておくことにする。