文字列比較で、条件分岐がうまくいかないときの対応方法

2バイト文字で文字列比較をした場合、文字のエンコード形式による違いでうまくいかない場合があります。
コンパイルもでき、デバッグで条件分岐(IF文)には止まるのですが、以下のような文字列比較でそのまま分岐されずにスルーしてしまうのです。

Dim hoge as String = "ほげほげ"
If hoge = "ほげほげ" Then
    MessageBox.Show("分岐OK!")
End If

このコードの場合MessageBoxが表示されるはずですが、なぜか表示されない。

Dim hoge as String = "HOGEHOGE"
If hoge = "HOGEHOGE" Then
    MessageBox.Show("分岐OK!")
End If

ですが、このコードではMessageBoxがしっかり表示される。

ソースファイルのエンコード形式を確認したところ、「Shift-jis」形式になっていました。2バイト文字を使わない時など、問題ない場合もありますが、特定の入力文字などで文字化けが発生した場合にいきなり比較できなくなったりして、思わぬ不具合が出てしまいます。
安全のためにも「UTF-8」形式で再度保存しなおしておけば、不具合なくうまくいきます。

VisualStudioの上書き保存のエンコード形式を指定する方法で1つ1つ対応してもいいですが、FileCode Checkerを使うと一括で変換できるので便利です。

FileCode Checker

このソフトはファイルのもフォルダにも対応しており、現在の文字コードも一覧で確認できますので、かなり便利です。
注意点としては、バイナリ形式などのほかの必要なファイルも間違って変換してしまうと大変なことになるので、確実に右クリックでリストから除外してから実行しましょう。

filecodechk

最近ではデフォルトのエンコード形式は「UTF-8」形式になっていることがほとんどだと思います。
ですが、主に2バイト文字を使うソースやダウンロード、コピペしたプログラムソースなどは、「動かない」「不具合だ」という前に、念のため一度エンコード形式をチェックしてみたほうがいいでしょう。

この記事をシェアする
Tweet about this on Twitter
Twitter
Share on Facebook
Facebook
0

Comments

Comments