|
■No48668 (区絵里瑛太 さん) に返信
> また、これら環境依存文字がテキストに含まれているかどうかをチェックするには、どうしたらよいでしょうか?
自前で、各文字のコード範囲をチェックしていくことになると思います。
最初、EncoderExceptionFallback でチェックできるかな…と思ったのですが、
今回の目的には合わないかも。
Imports System
Imports System.Text
Imports System.Collections.Generic
Public Class Form1
Private List As New List(Of Encoding)
Private fmt As String = "{0} {1,5}『{2}』"
Private Sub Form1_Load() Handles Me.Load
TextBox1.Dock = DockStyle.Top
ListBox1.Dock = DockStyle.Fill
ListBox1.IntegralHeight = False
ListBox1.Font = New Font("MS Gothic", 9)
ListBox1.BackColor = Me.BackColor
Dim encFB As New EncoderExceptionFallback()
Dim decFB As New DecoderReplacementFallback()
List.Add(Encoding.GetEncoding(932, encFB, decFB))
List.Add(Encoding.GetEncoding(1200, encFB, decFB))
List.Add(Encoding.GetEncoding(1201, encFB, decFB))
List.Add(Encoding.GetEncoding(20290, encFB, decFB))
List.Add(Encoding.GetEncoding(20932, encFB, decFB))
List.Add(Encoding.GetEncoding(50220, encFB, decFB))
List.Add(Encoding.GetEncoding(50221, encFB, decFB))
List.Add(Encoding.GetEncoding(50222, encFB, decFB))
List.Add(Encoding.GetEncoding(51932, encFB, decFB))
List.Add(Encoding.GetEncoding(65001, encFB, decFB))
End Sub
Private Sub TextBox1_TextChanged() Handles TextBox1.TextChanged
ListBox1.BeginUpdate()
ListBox1.Items.Clear()
Try
For Each enc In List
Try
enc.GetByteCount(TextBox1.Text)
ListBox1.Items.Add(String.Format(fmt, _
"○", enc.CodePage, enc.EncodingName))
Catch ex As EncoderFallbackException
ListBox1.Items.Add(String.Format(fmt, _
"×", enc.CodePage, enc.EncodingName))
ListBox1.Items.Add(vbTab & String.Format( _
"({0}){1}", TextBox1.Text(ex.Index), ex.Message))
End Try
Next
Finally
ListBox1.EndUpdate()
End Try
End Sub
End Class
|