- PR -

文字列に2バイト文字が含まれているか

投稿者投稿内容
トッティ
ベテラン
会議室デビュー日: 2008/04/01
投稿数: 64
投稿日時: 2008-11-28 13:16
 先日は、大変失礼しました。

VB.NETで、文字列に2バイト文字が含まれているか判断したいのですが
どのように行うのでしょうか?

例えば
Dim MOJI AS String
MOJI = "123AA" 無し
MOJI = "あ55" 有り

といった具合です。

よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2008-11-28 13:30
引用:

トッティさんの書き込み (2008-11-28 13:16) より:
VB.NETで、文字列に2バイト文字が含まれているか判断したいのですが
どのように行うのでしょうか?



StringはUnicodeなのでどの文字も1文字は2バイトです。(サロゲートペアを除く)

ご質問になりたいのは、Shift_JISでの2バイト文字、いわゆる全角ですね。
EncodingクラスでShift_JISに変換してそのバイト数を取得することができます。

Encoding.GetEncodingメソッド
Encoding.GetByteCountメソッド

を調べましょう。
変換前の文字数(=すべて半角だった場合のバイト数)と変換後のバイト数が
異なっていれば、いわゆる全角を含むことがわかります。

ただし、変換元の文字列がShift_JISで使用可能な文字だけで構成されていることが前提です。
開発しているアプリで、Unicodeにしかない文字も使用可能という前提条件があるなら、
2バイト文字かどうかを判断しようとしていること事態が間違いですので、
ご注意ください。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 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
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2008-11-28 14:18
半角カナは2バイト文字ではないってことで良いんですかね?
トッティ
ベテラン
会議室デビュー日: 2008/04/01
投稿数: 64
投稿日時: 2008-11-28 16:59
ありがとうございます。

If str.Length = enc.GetByteCount(str) Then
' 全角文字なし
Else
' 全角文字あり
End If
でOKでした。

でもスフレさんの、指摘されてように
本当は半角カナも2バイト文字に含めたいのです。

英数字とそれ以外(漢字、全角・半角かな、カナ)
みたいに

108
常連さん
会議室デビュー日: 2007/12/12
投稿数: 45
投稿日時: 2008-11-28 17:37
引用:
本当は半角カナも2バイト文字に含めたいのです。



本当は
というのがよくわかりませんが、

一文字づつAsc()で判断するか、
あらかじめ許可(不許可)文字を定義
してこれに含まれる(含まれない)かチェックしていくしかないでしょうか。


[ メッセージ編集済み 編集者: 108 編集日時 2008-11-28 17:49 ]
会議室デビュー日: 2006/06/02
投稿数: 19
お住まい・勤務地: 江戸
投稿日時: 2008-11-28 18:00
引用:

でもスフレさんの、指摘されてように
本当は半角カナも2バイト文字に含めたいのです。

英数字とそれ以外(漢字、全角・半角かな、カナ)
みたいに



EncodingクラスでEUC-JPに変換するとか。(EUC-JPでは半角カナは2byte)
正規表現か何かで半角英数だけ除去して、文字が残るかどうかで判断するとか。
108
常連さん
会議室デビュー日: 2007/12/12
投稿数: 45
投稿日時: 2008-11-28 18:12
引用:
EncodingクラスでEUC-JPに変換するとか。(EUC-JPでは半角カナは2byte)


本当だ;;
失礼しました。勉強させていただきました。

スキルアップ/キャリアアップ(JOB@IT)