2014年06月24日

【.NET】UTF8に存在する文字コードかどうか調べる

.NETでUTF8に存在する文字かどうかをチェックする方法です。

チェックしたいバイト配列をUTF8エンコードして、それをまたバイト配列に戻します。
UTF8エンコードできなかった文字は、元のコードには戻らないので
元の配列と比較するとコードが異なっているのでUTF8に存在しない文字とみなす
という考え方で判定しています


【ソース例】

'チェックするUTF8文字のバイト配列
Dim chkbyte As Byte() = {Convert.ToInt16("E3", 16) _
, Convert.ToInt16("81", 16) _
, Convert.ToInt16("81", 16) _
, Convert.ToInt16("FF", 16) _
, Convert.ToInt16("00", 16) _
}

'UTF8にする
Dim dt As String
dt = System.Text.Encoding.UTF8.GetString(chkbyte)


'バイト配列に戻す
Dim re As Byte() = System.Text.Encoding.UTF8.GetBytes(dt)


'配列を比較
Dim isEqual As Boolean = DirectCast(chkbyte, IStructuralEquatable).Equals( _
re, StructuralComparisons.StructuralEqualityComparer)

'元のバイト配列と変換後のバイト配列が異なっていたらエラーとする
If isEqual = False Then
MsgBox(" utf文字コードエラー")
End If


実際にはファイルを読み込んでチェックしたりすると思いますが
その場合は、ファイルをバイト配列に読み込んでください。
posted by pltokyo at 11:33| Comment(0) | .NET