Sample03 Metaタグのcharsetでコードページを判定する



 ドライブDの直下配置した TEST.htm ファイルを解析し、Metaタグのcharsetの値とコードページを取得するサンプルです。ボタンをクリックすると取得したcharsetとコードページをテキストボックスに表示します。



※サンプルは例外処理などを考慮しておりません。使用する場合は注意してください。なお、VB2010以外での動作確認しておりません。
※TextSS.net では例外を考慮し、さらに改良したソースコードを使っています。

'*******************************************************************************************
'** 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 StringAs String

        'ファイルを読み込むためのバッファを確保(1024バイト)
        Dim chrReadText As Char() = Space(1024)

        'ファイルをとりあえずコードページ ASCII で確保したバッファに読み込む
        Using srFileRead As New StreamReader(strFile, Encoding.ASCII)
            srFileRead.ReadBlock(chrReadText, 01024)
        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)