2004.09.25 (Saturday)
ブログ上でMSXの半角かなを表示するテスト
このblogはInternetExplorerの Webフォント埋め込み技術 を用いて、TrueType化したMSXフォントをブラウザ上で 文字として 表示しています。ですが、このblog(というかほとんどのblog)は、文字コードにUnicode(UTF-8)を用いており、MSXで用いる半角ひらがな・カタカナをそのままblogへ投稿してしまうと文字が化けてしまう問題が生じていました。
で、ひょんなことからアイデアを思いついたので、CHR$(128)〜CHR$(255)を表示するテストをここでさせて下さい。
原理はなんてことはない、このMSXフォントはSymbolフォントとして作ったので、CHR$(128)〜CHR$(255)の文字に関しては È のように文字コード展開してから投稿してみましたが…どうでしょう?
うまくいったら拍手ご喝采。ダメだったら…また考えよう。
【9.25 2:40更新】うまくいったようなので、今後はこの手法でBASICプログラムを紹介して行きます!
【9.28更新】アクセスありがとうございます。意外に反響が高く、お問い合せが何件かありましたのでこの場でご説明させていただきますと、この手法はWindows版InternetExplorerのみ有効です。Webフォント埋め込み自体がIEのみの技術である上、UTF-8上のSymbolコードがWindows版IEでたまたま表示できたことによる副産物の効果です。Netscape、Mozilla、Operaなどの他のブラウザでは実現できませんが、これらのブラウザでもMSXフォントのWeb表示を目指してフォントや文字コードの見直しを始めました。よろしければ知恵を貸して下さい。
けっこう大変な置換作業
BASICプログラムをWebで表示する為に、文字の置換作業が必要になります。調べてみたらこれだけ必要でした…。
- " → "
- & → &
- < → <
- > → >
- 80h〜FFhの文字 → &#xxx; の形
問題なのは、罫線や日月火水など半角漢字の、GRAPHキーを押したときに表示される2バイト文字が、相変わらず表示できないことです。仮にTrueTypeフォントの00h〜31hが定義できたとしても、2バイト文字の2バイト目を00h〜31hへマッピングする作業が必要になります。
こりゃ手作業はつらい。表示向け専用の置換ツールを作らないとダメですな。
投稿: nf_ban 2004.09.25 02:15 [ウェブログ・ココログ関連, MSXのサブマシン化計画] | 固定リンク 
トラックバック
この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/30080/1514977
この記事へのトラックバック一覧… ブログ上でMSXの半角かなを表示するテスト:
コメント
Mozilla Firefoxではこの方法ではカナ文字は出ませんでした。
多分、Operaも無理だと思います。
投稿: Tatsu 2004.09.26 13:29
もともとWebフォント埋め込み自体がIE依存である(他のブラウザは利用できない)ことはご理解していただくことにして。
IE以外のブラウザを考慮し、且つ、このブログを読むような奇特な人はSinさんの「MSX VIEWer」をインストールしているだろうという前提で、MSX VIEWerに付属するMSXフォント(TrueType)をWebで代替するようCSSを組んでみましたが、うちのNetscape 7.1ではうまくいきませんでした。
MSX VIEWer はこちら → http://www.minagi.jp/msx/
CSSの内訳は
-----
@font-face {
font-family: msxfont;
font-style: normal; font-weight: normal;
src: url(http://gigamix.cocolog-nifty.com/blog/MSXWIDT0.eot);
}
.msxlist_small {
padding: 8px;
background: #00f;
color: #fff;
font-family: "MSX ROM 6dot",msxfont;
font-size: 8px;
line-height: 10px;
white-space: pre;
}
-----
@font-faceで、Web埋め込みフォントを msxfont という名前で定義しています。
しかし、のちの.msxlist_smallというクラスを定義する際、フォントの指定は埋め込みフォントよりもTrueTypeフォントのほうを先に記述しているのに、僕のNetscape 7.1ではうまくいきません。(IEでは問題ありません)
CSS(とHTML)の仕様上は、この定義方法(とという文字の記述方法)で問題ないはずだと思いますが…と思って調べてみたら、80hからffhまではもともとUTF-8で存在してはならない文字コード…ってホントですか!?
よって、MozillaやOperaでは不正な文字へのCSSが無効で、IEがたまたまCSSを有効にしちゃってMSXフォントが表示できていただけに過ぎないということなんですかね?
僕の解釈が間違っていて、UTF-8でも80hからffhまで使える仕様なのであれば、IEでの実装が正しく、MozillaやOperaの実装が甘い、ということになります。
.msxlist_smallを表示するにはISO 8859-1(Laten-1)に切り替えるべきなんでしょうが、UTF-8の日本語テキストの中で一部分だけISO 8859-1というわけにも行きませんしねぇ。どうしましょ。
…しばらくはこのままの方針ですかね(^_^;
投稿: nf_ban 2004.09.27 03:40
80H-FFHがUTF-8で使えないというのはダウトです。
http://www.unicode.org/charts/PDF/U0080.pdf
を見ると、Unicode(及びこれをエンコードしたUTF-8)では、80H-FFHはControls and Latin-1 Supplement(コントロール文字とラテン-1の補足)になっていて、コントロール文字や欧米の文字が入ります。
MSX ROM 6dotフォントをフォントに指定した場合、MSX ROM 6dotフォントはSymbol Character Setしか持っていないため、(フォントインストーラーSAKURAにて確認。)MSX ROM 6dotフォントでは表示は行えません。
この場合、HTMLでは特定の動作を定めないとしているので、MozillaやOperaでは常用するフォントを見に行って、IEでは指定したフォントをそのまま表示したのではないかと思います。
と言う訳で、MozillaやOperaの動作も「あり」ならば、IEの動作も「あり」といえるのではないでしょうか。
MozillaやOperaの名誉のためということで。
投稿: Tatsu 2004.09.28 01:31
UTF-8で80hそのものを表すなら#194;#128じゃないかな。
http://ja.wikipedia.org/wiki/UTF-8
むしろ、Unicodeには半角カナという区分が存在するらしいので、あとはフォントの問題だけのような気がする。
投稿: ふる 2004.09.28 01:50
先ほどの書き込みでは、エンコード前のUnicodeを念頭に書いてました。
申し訳ないです。
投稿: Tatsu 2004.09.28 02:57
ご意見ありがとうございます。僕としても出来ることならIE以外のブラウザでもMSX-BASICのリストを表示したいので、もうしばらく知恵を貸してください。(^_^;。
なんか思っていたよりも根が深そうです。しかも複数の問題が重なり合って、意見がかみ合わず、事態を悪化させているようです。この件について私達が考えなければならない案件は、以下のものでしょうかね?
1.MSX→UTF-8へのマッピングとエンコード方法を決める
2.仕様に従いTrueTypeフォントを作成する
3.テキストの変換環境(スクリプト?マクロ?ツール?)を作成する
4.ひたすら動作テスト
■MSX→UTF-8のマッピング(エンコード)の疑問点
・UTF-8には半角カタカナはあるが、MSXの半角カタカナ以外の80h以降の文字はどのコードに割り当てるべきなのか?
・MSXの80h?FFhは、Latin-1または日本語のかな領域のどちらにマッピングすべきなのか?
・どのコードにも割り当てられないのであれば、自由にマッピングをしても良いのではないだろうか?
・日月火水時分秒などのGRAPH文字はやはり諦めるのか?
■フォントエディタであるTTEditの仕様上の問題点
シンボルフォントの場合:
・20h?FFhの文字を登録することができる。
・Latin-1や日本語のかな領域へ文字を登録できない。
欧文フォントの場合:
・Unicodeモードでは80h?9Fhは編集できない。
http://gigamix.cocolog-nifty.com/blog/040927FO1_L.GIF
・JISモードにしたら80h?9Fhがかなり編集できたが、すべてを埋めることはできない。
http://gigamix.cocolog-nifty.com/blog/040927FO2_L.GIF
・Latin-1や日本語のかな領域へ文字を登録できない。なぜ!?
和文フォントの場合:
・Latin-1の領域と日本語のかな領域にそれぞれ文字を登録しなければならないのか?
TTEdit全般的な問題:
不正な文字コードと(TTEdit内で)判定された領域は編集・登録できない。(0x81など)
半角は面倒くさいのでいっそのことBASICリストの文字をすべて全角文字に変換して、フォントも全角文字で登録したら解決なのかもしれないとは思いつつ、そんなことしたらガイジンさんが泣いちゃうかもしれませんのでボツ。
投稿: nf_ban 2004.09.28 04:25
べつに悪化というほど深刻な事態にはなってないと思うけど、まあ、僕の書き込みは間違ってました。
# 実体参照でエンコード後のバイナリを表現するなんて馬鹿なことを…
で、Unicodeには外字用にE000h-F8FFhが用意されているので、適当にババーンと256文字まるごとマッピングしては?
投稿: ふる 2004.09.29 02:35
これは当然なんだろうけど、H"ではちゃんと表示されず。ココモブ経由でも駄目でした。あと、2バイト文字の範囲は00h~1fhだったと思うけど、実機でもDOSでは表示できないからなぁ…。
投稿: 大槻真嗣 2004.09.30 11:01






