文字列の全角・半角をチェックする

example(VB.net)

Imports System.Text

  Sub Main()
    Dim ret As Integer
    Dim All_Wide As String = "こんにちは"
    Dim All_Narrow As String = "Hellow"
    Dim Narrow_Wide As String = "こんにちは & Hellow"

    'retは vbWide(4)
    ret = CheckText(All_Wide)

    'retは vbNarrow(8)
    ret = CheckText(All_Narrow)

    'retは -1
    ret = CheckText(Narrow_Wide)
  End Sub

  Private Function CheckText(ByVal str As String) As Integer
    Static Encode_JIS As Encoding = Encoding.GetEncoding("Shift_JIS")
    Dim Str_Count As Integer = str.Length
    Dim ByteCount = Encode_JIS.GetByteCount(str)

    If Str_Count * 2 = ByteCount Then
      Return vbWide '4
    ElseIf Str_Count = ByteCount Then
      Return vbNarrow '8
    Else
      Return -1
    End If
  End Function

シフトJIS文字列は全角文字が2byte、半角文字が1byteと決められているため、文字列の文字数とバイト数を比較すれば、文字列中の文字がすべて全角か文字列中の文字がすべて半角かもしくは混在しているかが分かる。

文字列がすべて全角文字の場合は、文字列のバイト数は、文字数を2倍した値と等しくなる。

また、文字列がすべて半角文字からなる場合は、文字列のバイト数と文字数は等しくなるはずである。