「1バイト文字」と「2バイト文字」の区別について・・・・。

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
卓漏
記事: 32
登録日時: 2005年11月30日(水) 06:38
お住まい: 静岡県の田舎町

「1バイト文字」と「2バイト文字」の区別について・・・・。

#1 投稿記事 by 卓漏 »

文字数を数えるプログラムを作っているのですが、
1バイト文字(a,A,!,・)は正常に動作しますが、
2バイト文字(あ,亜)はうまくできません。
いちおう、文字数を調べるために、バイト数を返す「Len$関数」を使っているのが原因なのはわかっています・・・。

そこで、1バイト文字と2バイト文字を区別するための方法が知りたいです。
よろしく、お願いします。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#2 投稿記事 by イグトランス »

 2バイト文字を1文字として数えたければ自分で作る、
Unicodeに変換してその文字数を数えるなどといった方法があります。

 前者の方式ではCharNext関数が使えると思います。
Declare Function CharNext Lib "user32" Alias "CharNextA" (psz As BytePtr) As BytePtr
この関数は1バイト文字2バイト文字を見分けてきちんと次の文字へのポインタを返します。
文字列の終わりにはEx"\0"の文字が入っているので、
そこに到るまでに何文字あったかを数え上げれば良いというわけです。

 後者の方式ではMultiByteToWideChar関数を使います。
これでUnicodeへ変換した後lstrlenW関数で数えます。
Declare Function lstrlenW Lib "kernel32" (pString As *WCHAR) As Long
Unicode(UTF-16)は原則全ての文字が16ビットですので、
Unicodeで変換してしまえば何も考えずに文字数を数えるだけで良いのです。
(正確にはそうでないのですが通常は十分だと思います)
マティ
記事: 161
登録日時: 2005年8月23日(火) 00:15
お住まい: 沖縄県
連絡する:

#3 投稿記事 by マティ »

手前味噌ですが、以下の記事も参考にして下さい。
SJIS対応文字列処理
UNICODE対応文字列処理
卓漏
記事: 32
登録日時: 2005年11月30日(水) 06:38
お住まい: 静岡県の田舎町

#4 投稿記事 by 卓漏 »

ありがとうございます。
早速、試してみたいと思います。
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

自分で作るなら

#5 投稿記事 by konisi »

昔とあるプログラムを作る際のデータベースとして作った現在定義されている文字の全てです。
ただ、選出は手作業なのでちょっと過不足があるかもしれません。

出力コード↓ 出力後に選出した結果↓
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
返信する