C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 38 を表示中)
■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バイト文字も同様に処理できます。
返信 編集キー/


管理者用

- Child Tree -