EUCコードを Shift-JISコードに変換する .NET では、EUCコードを Shift-JISコードに変換するといったコード変換を行うことも可能です。Webへアクセスして、ページソースを取得させることが可能です。この機能を使えば、WebサイトなどでEUCで書かれたhtmソースをShift-JISに変換してソース表示して確認するといった事も可能です。ここでは、簡単に、「URL」を指定してページソースを取得し、EUCコードで書かれたページソースのデータをShift-JISコードに変換する場合での説明をしています。フォームに次の様なコードを記述します-----------VB.NETコーディングここから-------------------1.フォームに、テキストボックスコントロールと ラベルコントロール、ボタンコントロールを配置します。 下記は、デフォルトのオブジェクトの名前と配置を示しています。 ┏━━━━┓ ┏━━━━┓ ┃Labale1 ┃ ┃TextBox1┃ ┗━━━━┛ ┗━━━━┛ ┏━━━━┓ ┃Button1 ┃ ┗━━━━┛ ┏━━━━┓ ┏━━━━┓ ┃Labale2 ┃ ┃TextBox2┃ ┗━━━━┛ ┃※複数行┃ ┃ ┃ ┗━━━━┛ ┏━━━━┓ ┏━━━━┓ ┃Labale3 ┃ ┃TextBox3┃ ┗━━━━┛ ┃※複数行┃ ┃ ┃ ┗━━━━┛2.テキストボックスコントロール TextBox2,TextBox3は、 複数行の入力とするため、 Multiline プロパティを True にします。(複数行) ScrollBars プロパティを Vertical にします。(スクロールバー)3.配置したコントロールの ラベルのテキストを入力項目にあわせて変更します。 さらに、ボタンコントロールのtext プロパティに 「取得変換」と記述します。 ※説明用のためです。必須ではありません。 ┏━━━━┓ ┏━━━━┓ ┃URL ┃ ┃TextBox1┃ ┗━━━━┛ ┗━━━━┛ ┏━━━━┓ ┃取得変換┃ ┗━━━━┛ ┏━━━━┓ ┏━━━━┓ ┃変換前 ┃ ┃TextBox2┃ ┗━━━━┛ ┃※複数行┃ ┃ ┃ ┗━━━━┛ ┏━━━━┓ ┏━━━━┓ ┃変換後 ┃ ┃TextBox3┃ ┗━━━━┛ ┃※複数行┃ ┃ ┃ ┗━━━━┛4.ボタンコントロールをダブルクリックして、 ボタンのクリックイベントの編集を開始して、 フォームの宣言部に、次のコードを記述します。 Imports System Imports System.Text Imports System.Net さらに、次のコードを記述します。 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim strUrl As String 'URL Dim myWebClient As New WebClient 'Web Dim myDatabuffer() As Byte 'バッファバイト配列 Dim myDatabufferCov() As Byte 'バッファバイト配列 Dim strHtml As String Try 'URLをセットします strUrl = TextBox1.Text 'URLからデータを取り出します myDatabuffer = myWebClient.DownloadData(strUrl) 'エンコードしています strHtml = Encoding.Default.GetString(myDatabuffer) 'ページソースを表示しています TextBox2.Text = strHtml myDatabufferCov = COV_EUCTOSJIS3(myDatabuffer) Catch webEx As WebException 'エラー TextBox2.Text = webEx.ToString() End Try TextBox3.Text = Encoding.Default.GetString(myDatabufferCov) End Sub 'コード変換 'EUC→Shify-JIS アイネットマコト Function COV_EUCTOSJIS3(ByVal PistrCOV() As Byte) As Byte() Dim bytBytes() As Byte 'バイト配列 Dim Cov_SJis As Encoding = Encoding.GetEncoding("Shift_JIS") bytBytes = PistrCOV Dim strSrcE As String '変換した文字列 Dim bytRec() As Byte Dim bytWRec() As Byte Dim bytW2Rec() As Byte Dim lngLenC As Long Dim LngLenMax As Long Dim lngStep As Long Dim lngWStep As Long Dim lngWLenC As Long Dim lngWStepMax As Long Dim lngCount As Long Dim intFlg As Integer Const LC_BYTE = 65048 LngLenMax = bytBytes.LongLength lngLenC = 1 lngWLenC = 1 lngStep = LC_BYTE intFlg = 0 ReDim bytRec(lngStep) Do If lngLenC + lngStep > LngLenMax Then lngStep = LngLenMax - lngLenC ReDim bytRec(lngStep) End If bytRec = bytBytes '改行コードを変換します lngCount = -1 lngWStep = -1 ReDim bytWRec(0) Do lngCount = lngCount + 1 lngWStep = lngWStep + 1 If lngCount > lngStep Then Exit Do End If 'EUCコードの範囲をチェック If (bytRec(lngCount) >= &HA1 And _ bytRec(lngCount) <= &HFE) Or intFlg = 1 Then '第1バイトが、0xA1〜0xFE の範囲であることが、 '第一条件 '取り出したバイトをオーバーしたら処理を終える If lngCount + 1 > lngStep Then ReDim Preserve bytWRec(lngWStep) bytWRec(lngWStep) = bytRec(lngCount) Else '第1バイトをチェックして、 '奇数か偶数かを判定する。 '偶数の場合は、必ずあまりは0 If bytRec(lngCount) Mod &H2 = 0 Then '偶数の場合は、第2バイトは、 '0x02 マイナスした値 bytRec(lngCount + 1) = _ bytRec(lngCount + 1) - &H2 Else '奇数の場合は、第2バイトは、 '0x60 マイナスした値 'ただし、変換後、0x7Eをこえる場合は、 '0x61 マイナスした値 'つまり、変換後、0x7Eをこえる場合は、 'さらに 0x01マイナスすることとなる If (bytRec(lngCount + 1) _ - &H61) < &H40 Then bytRec(lngCount + 1) = _ bytRec(lngCount + 1) + &H9 Else bytRec(lngCount + 1) = _ bytRec(lngCount + 1) - &H61 '第2バイトをチェック If bytRec(lngCount + 1) > &H7E Then bytRec(lngCount + 1) = _ bytRec(lngCount + 1) + &H1 End If End If End If '第2バイトをチェック If bytRec(lngCount + 1) = &H7F Then bytRec(lngCount + 1) = _ bytRec(lngCount + 1) + &H63 End If '第1バイトの変換 '0xDFより値が小さい場合は、プラス 0x30 'それ以外の場合は、プラス 0x70 する '第1バイトをチェック If bytRec(lngCount) < &HDF Then bytRec(lngCount) = _ bytRec(lngCount) + &H1 bytRec(lngCount) = _ Int(bytRec(lngCount) / &H2) bytRec(lngCount) = _ bytRec(lngCount) + &H30 Else bytRec(lngCount) = _ bytRec(lngCount) + &H1 bytRec(lngCount) = _ Int(bytRec(lngCount) / &H2) bytRec(lngCount) = _ bytRec(lngCount) + &H70 End If ReDim Preserve bytWRec(lngWStep) bytWRec(lngWStep) = bytRec(lngCount) '2バイト書き出したので、スキップします。 lngCount = lngCount + 1 lngWStep = lngWStep + 1 ReDim Preserve bytWRec(lngWStep) bytWRec(lngWStep) = bytRec(lngCount) End If Else '範囲外なのでそのまま書き出します。 ReDim Preserve bytWRec(lngWStep) bytWRec(lngWStep) = bytRec(lngCount) End If Loop lngLenC = lngLenC + lngStep lngWLenC = lngWLenC + lngWStep If lngLenC >= LngLenMax Then Exit Do End If Loop COV_EUCTOSJIS3 = bytWRec End Function5.ビルドして実行します。6.フォームに表示された 「URL」欄に、取得したいURLを入力します。 ※EUC で書かれたWebサイトをしてください。 ※例) http://yahoo.co.jp/7.フォームに表示された「取得変換」を押すと、 「変換前」欄に、ページソースが表示されます。 「変換後」欄に、Shift-JISに変換したページソースが表示されます。-----------VB.NETコーディングここまで-------------------EUCで書かれたページの内容をそのままの状態では、確認が出来ませんが、本サンプルのように、コード変換することで、容易に確認が出来るようになります。また、本サンプルは一旦ファイルに落として、FilePutによるI/Oを行って、変換を行っています。
Copyright(c)2001-2004 Ai Net Makoto 記事・情報の無断転載を禁止します。