■19917 / ) |
Re[2]: 文字が全角か半角か判定する方法は? |
□投稿者/ れい (586回)-(2008/06/02(Mon) 10:56:08)
|
■No19914 (シャノン さん) に返信 > ■No19827 (シャノン さん) に返信 > > そもそもの目的は何かというと、バイナリエディタみたいなもの > (エディタまで行かずにビューワ止まりかもしれない)を作ってみようと思ったわけですよ。 > で、よくあるじゃないですか、バイナリデータの隣に文字が表示されるやつが。 > 例えば、この文字表示のエンコードを UTF-8 としたとき、日本語のテキストを表示すると、 > 1文字3バイトになるわけですが、それをどうやって表現するかなぁ、と。
ならば「一文字ずつ」表示するのが妥当ではないでしょうか? 一文字ずつ位置を指定して表示すれば文字幅は関係ないですね。 すごく長い文字でない限り問題ないかと。
きちんと2倍の幅になってほしいなら、 2倍の幅が保証されている「MS ゴシック」とか「MS 明朝」を使うのがいいと思います。
> | +0 +1 +2 +3 +4 +5 | 012345 > 0000 | e3 81 82 e3 81 82 | ああ > 0006 | 41 42 43 44 45 46 | ABCDEF > > だと格好がつかないわけで。 > やはりここは、適当に詰め物を入れて、 > > | +0 +1 +2 +3 +4 +5 | 012345 > 0000 | e3 81 82 e3 81 82 | あ.あ. > 0006 | 41 42 43 44 45 46 | ABCDEF > > とかになるのが妥当かなぁ、と。 > で、このとき、フォントによっては "あ" の幅が "A" の2倍でないとかっこ悪いよね、と。
Monospacedの話でもいったように、 「A」「B」「C」「0」「1」「2」ですら等幅でない場合が殆どですから 「012345」と「ABCDEF」を揃えることから考えないといけないわけです。
#殆どのMonospacedフォントで「1」は細いです。
ならやっぱり「一文字ずつ描画」ではないでしょうか?
私は「あ」などの3バイト文字は「|-あ-|」みたいに、 線を引いてその文字に相当する領域を示すことにしています。
文字幅が変わっても問題ないですし、 4バイト文字も5バイト文字も同様に処理できます。
|
|