Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
strConvのunicodeについて
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30426#CommentId83673
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2019/10/29 01:03:21
> Dim length As Integer = System.Text.Encoding.Default.GetCharCount(binary)
ひとつ書き忘れ。
Shift_JIS データの文字数を数えるにあたり、指定したバイナリが
「Shift_JIS としてありえないデータだった場合にどうすべきか」を考える必要があります。
Dim shiftJisBinary() As Byte = ……
があったとして、この配列が指し示す「文字数」をカウントする処理を考えてみます。
Shift_JIS として不正なデータだったらエラーとする場合は ExceptionFallback を使います。
Dim ef = System.Text.EncoderFallback.ExceptionFallback
Dim df = System.Text.DecoderFallback.ExceptionFallback
Dim enc = System.Text.Encoding.GetEncoding("Shift_JIS", ef, df)
Dim length As Integer = enc.GetCharCount(shiftJisBinary)
あるいは、Shift_JIS で表現できないバイト列が混入していた場合において
それをエラーとするのではなく、代替文字で置き換える(いわゆる文字化け)のであれば、
ReplacementFallback を使い、変換失敗時の代替文字を指定します。
Dim ef As New System.Text.EncoderReplacementFallback("⊛") '代替文字を指定
Dim df As New System.Text.DecoderExceptionFallback()
Dim enc = System.Text.Encoding.GetEncoding("Shift_JIS", ef, df)
Dim length As Integer = enc.GetCharCount(shiftJisBinary)
なお、最初の回答に書いた .GetEncoding("Shift_JIS") という指定方法の場合は、
ReplacementFallback が指定されたものとして処理されます。