2バイト文字の区別をしたい

解決


お世話様です  2007-03-16 23:56:29  No: 135785

ある文字(文字数=1)を、

1バイト文字なのか、2バイト文字なのか判断したいのです。
こちらで考えた方法は、
・StrConvをvbFromUnicodeで変換!
・変換した文字列にLenBを使う。
を使うという方法です。

上記方法で問題なく動作していますが、
他に、関数などが提供されている。
などの情報を知りたいのです。

環境はVB6です。

以上、ご意見お願いいたします。


K.J.K.  2007-03-17 01:13:08  No: 135786

shift-jisのものには変換できない文字は何バイトのものとして判断するのでしょうか?
それは入力されない条件であれば、Asc(W)などで判断すればいいのでは。


通り巣鴨  2007-03-17 02:52:49  No: 135787

使った事無いけどこのAPIじゃだめ?
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpintl/html/_win32_isdbcsleadbyte.asp


Blue  2007-03-17 08:56:49  No: 135788

>このAPIじゃだめ?
引数を見てもらえばわかりますが、BYTE型
つまり1バイトの情報を渡す必要があります。
(LPCSTRならまだ使えたが、、、)

ここでいう1バイトの情報とはShift_JISコードでの文字列情報ですので
結局のところStrConvやらAscやらで変換する必要があります。


あいうえお  2007-03-19 18:30:03  No: 135789

VBではUNICodeであるため文字は全部2バイトです。
しかし、全角、半角の文字の判断なら1文字ずつなら、
strConv関数を使用すればできます。
 
if a = atrConv( a, vbWide ) then
       全角文字
End If


お世話様です  2007-03-27 22:18:31  No: 135790

返信遅れました。

いろいろ試してみた結果
K.J.K.さん語提案の
AscW
で判別するのがよさそうですが、
> shift-jisのものには変換できない文字
というものはどんなものでしょうか。

すいませんが、
unicode,shift-jis
などがわかりません。
(ググっても、いまいち理解できませんでした。)

あいうえおさんご提案のものは、
半角カタカナが2バイト文字として認識できないので、
ちょっと、保留してます。

題名が悪かったと思いますが、
ある1文字がアスキーコード(0〜255)なのかどうか、
判断したいです。

よろしくお願いします。


K.J.K.  2007-03-28 02:02:42  No: 135791

とりあえず、関連するwikipedia
http://ja.wikipedia.org/wiki/%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89
http://ja.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange
http://ja.wikipedia.org/wiki/Shift_JIS
http://ja.wikipedia.org/wiki/Unicode
http://ja.wikipedia.org/wiki/Unicode%E4%B8%80%E8%A6%A7_0000-0FFF
さて、ここで問題です。貴方が判断材料として使おうとしているのは
どのコードなのでしょうか? また、VBで使われているコードはどれで
しょうか?


お世話様です  2007-03-28 19:00:28  No: 135792

K.J.K.さんご丁寧にありがとうございます。
参考のホームページを一通り読まさせていただきました。

まず、
> VBで使われているコードはどれでしょうか?
Unicodeだと考えています。
(以前、VBではunicodeを採用しているという文面を見ました)
> 貴方が判断材料として使おうとしているのは
> どのコードなのでしょうか?
判断する対象文字列は、VB上のTextBox内の文字なので、
やはり、Unicodeになると考えます。

あと、shift-jisの問題ですが、
参考のホームページを読むと、shift-jis特有のユーザ定義文字などが
あると理解しています。
入力先は前述のとおり、VB上のTextBoxなので、
通常、文字をタイプする分にはUnicodeとなると思いますが、
shift-jisのコードをCtrl+Cして、Ctrl+Vしたとなると、
どうなるかが心配です。

誤りなどありましたら、どんどんご指摘下さい。


K.J.K.  2007-03-28 20:57:10  No: 135793

お世話様です 2007/03/28(水) 10:00:28 <220.110.136.221> wrote:
> > 貴方が判断材料として使おうとしているのは
> > どのコードなのでしょうか?
> 判断する対象文字列は、VB上のTextBox内の文字なので、
> やはり、Unicodeになると考えます。

となると、UTF-16ですから、全て1文字=2byteですよね。
つまり、1byte文字か2byte文字かを判断しようとすること自体が
ナンセンスになります。

お世話様です 2007/03/27(火) 13:18:31 <220.110.136.221> wrote:
> 半角カタカナが2バイト文字として認識できないので、

という条件からすると、Shift-JISでもありませんよね。Shift-JISならば
半角カタカナは1byte文字として扱われますし。

ちなみに、
http://ja.wikipedia.org/wiki/EUC-JP
の通り、EUC-JPで半角カタカナ文字は一見2Byte文字ですが、
実際には1Byte文字です。

> ある1文字がアスキーコード(0〜255)なのかどうか、

ASCIIならば、0〜127になります。

Unicode、Shift-JIS、ASCIIの3種類を提示したのは、これが日本語版の
Windowsでは標準で使うことのできる文字コードであるからです。

で、これらではないものを使うのならば、自分で変換して調べるか、
そういう機能を持った外部DLLなどを使うか、などになるのが一般的で
しょう。

まぁ、単にそういう判断をしたい、というだけなのならば、AscWの戻り値
をSelect Caseして独自に判断すればいいのでしょうが、そもそもその
出力結果を何に使おうとしているのでしょうか?


お世話様です  2007-03-28 22:56:56  No: 135794

返信ありがとうございます。

まず、VB上の文字が全てunicodeであり、
2Byteで表現されているのを知らなかった為、
変な質問タイトルになってしまいました。
今、思うと、質問タイトルは
「入力された文字がASCIIコードかどうかを調べる方法」
が適切でした。ご迷惑おかけいたします。

目的としては、
テキストボックスの文字の入力制限をしたく、
ASCIIコードのみの入力を可能としたいのです。

それでは、IMEをOFFにすれば。
という意見もあるかもしれませんが、
Ctrl+C、Ctrl+Vで入力できてしまうのです。
そこで、テキストチェンジ時に、
入力された文字をチェックしようとしています。

これであれば、AscWで、OKでしょうか。

以上


K.J.K.  2007-03-28 23:43:28  No: 135795

1文字ずつチェックするのであれば、AscWなどでいいでしょうが、
文字列をそのままチェックするのであれば、Like演算子や広義の
正規表現を用いる方が楽だとも思います。まぁ、文字列の長さにも
よるでしょう。

理想的なのは、入力文字をKeyPressイベントでチェックし、
サブクラス化などしてWM_PASTEやWM_CONTEXTMENUを握りつぶす
ことなのでしょうけれでも、わざわざこのためにサブクラス化
するのも面倒ですし。


お世話様です  2007-03-29 01:37:18  No: 135796

ありがとうございました。

今回は1文字だけのチェックなので、
AscW
で対応します。

皆様、ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加