- - PR -
文字列に2バイト文字が含まれているか
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-11-28 13:16
先日は、大変失礼しました。
VB.NETで、文字列に2バイト文字が含まれているか判断したいのですが どのように行うのでしょうか? 例えば Dim MOJI AS String MOJI = "123AA" 無し MOJI = "あ55" 有り といった具合です。 | ||||
|
投稿日時: 2008-11-28 13:30
StringはUnicodeなのでどの文字も1文字は2バイトです。(サロゲートペアを除く) ご質問になりたいのは、Shift_JISでの2バイト文字、いわゆる全角ですね。 EncodingクラスでShift_JISに変換してそのバイト数を取得することができます。 Encoding.GetEncodingメソッド Encoding.GetByteCountメソッド を調べましょう。 変換前の文字数(=すべて半角だった場合のバイト数)と変換後のバイト数が 異なっていれば、いわゆる全角を含むことがわかります。 ただし、変換元の文字列がShift_JISで使用可能な文字だけで構成されていることが前提です。 開発しているアプリで、Unicodeにしかない文字も使用可能という前提条件があるなら、 2バイト文字かどうかを判断しようとしていること事態が間違いですので、 ご注意ください。 | ||||
|
投稿日時: 2008-11-28 13:30
Dim str As String = "123AA"
Dim enc As Encoding = Encoding.getEncoding(932); If str.Length = enc.GetByteCount(str) Then ' 全角文字なし Else ' 全角文字あり End If | ||||
|
投稿日時: 2008-11-28 14:18
半角カナは2バイト文字ではないってことで良いんですかね?
| ||||
|
投稿日時: 2008-11-28 16:59
ありがとうございます。
If str.Length = enc.GetByteCount(str) Then ' 全角文字なし Else ' 全角文字あり End If でOKでした。 でもスフレさんの、指摘されてように 本当は半角カナも2バイト文字に含めたいのです。 英数字とそれ以外(漢字、全角・半角かな、カナ) みたいに | ||||
|
投稿日時: 2008-11-28 17:37
本当は というのがよくわかりませんが、 一文字づつAsc()で判断するか、 あらかじめ許可(不許可)文字を定義 してこれに含まれる(含まれない)かチェックしていくしかないでしょうか。 [ メッセージ編集済み 編集者: 108 編集日時 2008-11-28 17:49 ] | ||||
|
投稿日時: 2008-11-28 18:00
EncodingクラスでEUC-JPに変換するとか。(EUC-JPでは半角カナは2byte) 正規表現か何かで半角英数だけ除去して、文字が残るかどうかで判断するとか。 | ||||
|
投稿日時: 2008-11-28 18:12
本当だ;; 失礼しました。勉強させていただきました。 |