'******************************************************************************************* '** Sample03 Metaタグのcharsetでコードページを判定する By Yamashita-Y ** '******************************************************************************************* '** 注意事項 ** '** 1.初心者の方に分かりやすくするため、もっとも基本的に方法でコーディングしています。 ** '** 2.例外処理については考慮していません。 ** '** 3.使用した結果によるいかなる保障もいたしません。 ** '** 4.フォーム上に Button, TextBox を配置してください。 ** '** 5.ドライブD直下に TEST.htm ファイルを用意してください。 ** '******************************************************************************************* '** 開発履歴 ** '** 2012.12.18 初版公開 ** '******************************************************************************************* Imports System Imports System.IO Imports System.Text Imports System.Text.RegularExpressions Public Class Form1 'charset の値を取得する正規表現パターン Private Const strRegex_charset = "<META[\s\t]+[^>]*charset[\s\t]*=[\s\t]*([\w()-]+)[""\s\t\w()=-]+>" Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 'ドライブDの直下に TEST.htm ファイルを作成してください。 ' 無い場合はエラーになります。 Me.TextBox1.Text = GetHTMLcharset("D:\TEST.htm") End Sub Public Function GetHTMLcharset(ByRef strFile As String) As String 'ファイルを読み込むためのバッファを確保(1024バイト) Dim chrReadText As Char() = Space(1024) 'ファイルをとりあえずコードページ ASCII で確保したバッファに読み込む Using srFileRead As New StreamReader(strFile, Encoding.ASCII) srFileRead.ReadBlock(chrReadText, 0, 1024) End Using '正規表現で charset の値を取得する Dim mc As MatchCollection = Regex.Matches(Trim(New String(chrReadText)), strRegex_charset, RegexOptions.IgnoreCase) If mc.Count > 0 Then 'マッチした場合は最初の1個を取得し、コードページを取得 ' 存在しない名前が指定されると例外が発生します。 Dim enc As Encoding = Encoding.GetEncoding(mc.Item(0).Groups(1).Value) Dim intCharsetCP As Integer = enc.CodePage 'マッチした文字列とコードページを返す Return mc.Item(0).Groups(1).Value & " (" & intCharsetCP.ToString() & ")" Else 'ブランクを返す Return "" End If End Function End Class |
■出力結果■ コンソール出力はありません。画面上で確認してください。 |
■ダウンロード■ Sample03.zip (80Kb) |