【 Stream オブジェクト 】

1. ASP による画像コンテンツの作成
2. HTML + VBScript でバイナリファイルのダンプ表示
3. キャラクタセット変更による shift_jis から euc-jp へのコンバーション

<%
Response.ContentType = "image/JPEG"
 
'***********************************************************
'  画像コンテンツ作成サンプル
'***********************************************************
 
	' ------------------------------------------------------
	' Stream オブジェクト の作成
	Set Stream = Server.CreateObject("ADODB.Stream")
 
	' ------------------------------------------------------
	' Stream のオープン
	Stream.Open
 
	' Stream タイプの指定
	Stream.Type = 1		' StreamTypeEnum の adTypeBinary
 
	' 既存ファイルの内容を Stream に読み込む
	Stream.LoadFromFile Server.MapPath( "sample.jpeg" )
 
	' バイナリ型の Stream オブジェクトからを読み取って出力
	Response.BinaryWrite Stream.Read
 
	' Stream を閉じる
	Stream.Close
 
	' ------------------------------------------------------
	' Stream オブジェクト の解放
	Set Stream = Nothing
 
%>


  StreamTypeEnum 意味
1
adTypeBinary
1
バイナリデータを表します
2
adTypeText
2
既定値です。Charset で指定された文字セット
にあるテキストデータを表します


  • Charset は システムが認識できる文字セット文字列の一覧から選択します

  • HKEY_CLASSES_ROOT\MIME\Database\Charset を参照して下さい

  • デフォルトの Charset は Unicode です
  • FileSystemObject と違ってバイナリファイルにアクセスできる他、ADO のデータベースアクセスと同じく
    一般的な ActiveX のセキュリティ制限を受けません
  • 00 00 00 00 20 00 00 00 FF FF 00 00 FF FF 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    E8 02 00 00 20 00 00 00 FF FF 03 00 FF FF 01 00 
    00 00 00 00 30 10 11 04 00 00 00 00 00 00 00 00 
    28 00 00 00 20 00 00 00 40 00 
    


    <SCRIPT language=VBScript>
     
    ' ------------------------------------------------------
    ' Stream オブジェクト の作成
    Set Stream = CreateObject("ADODB.Stream")
     
    ' **********************************************************
    ' 16進数コード表示
    ' **********************************************************
    function ShowDump()
     
    	Dim LineBuffer,DispBuffer,CWork
     
    	' ------------------------------------------------------
    	' Stream のオープン
    	Stream.Open
     
    	' ------------------------------------------------------
    	' Stream タイプの指定
    	Stream.Type = 1		' StreamTypeEnum の adTypeBinary
     
    	' ------------------------------------------------------
    	' 既存ファイルの内容を Stream に読み込む
    	Stream.LoadFromFile document.all("DumpFile").value
     
    	' ------------------------------------------------------
    	' バイナリ型の Stream オブジェクトからを読み取って加工
    	DispBuffer = "<PRE style='font-family:""MS ゴシック""'>"
    	Do while not Stream.EOS
    		LineBuffer = Stream.Read(16)
     
    		For i = 1 to LenB( LineBuffer )
    			CWork = MidB(LineBuffer,i,1)
    			Cwork = AscB(Cwork)
    			Cwork = Hex(Cwork)
    			Cwork = Ucase(Cwork)
    			Cwork = Right( "0" & Cwork, 2 )
    			DispBuffer = DispBuffer & Cwork & " "
    		Next
    		DispBuffer = DispBuffer & vbCrLf
     
    	Loop
    	DispBuffer = DispBuffer & "</PRE>"
     
    	' ------------------------------------------------------
    	' Stream を閉じる
    	Stream.Close
     
    	' ------------------------------------------------------
    	' 結果をセット
    	document.all("DumpArea").innerHTML = DispBuffer
     
    end function
     
    </SCRIPT>
    <HTML>
    <BODY>
    <INPUT type=file name=DumpFile onChange='Call ShowDump()'>
    <DIV id=DumpArea>
    </DIV>
    </BODY>
    </HTML>
    


  • 以下のような HTML を shift_jis で作成して、IE での文字化けを確認しておく
  • <HTML>
    <HEAD>
    <meta http-equiv="Content-type" content="text/html; charset=euc-jp">
    </HEAD>
    <BODY>
    変換前の日本語コードは Shift_JIS です
     
    </BODY>
    </HTML>
    


    葺*・Ov啄倍悟ヽードwタShift_JIS s"遣
    


  • 以下のコードを実行して再度 IE で表示すると正しく表示される

  • <%
    '***********************************************************
    '  キャラクタセット変更
    '***********************************************************
     
    	' ------------------------------------------------------
    	' 入力用 Stream オブジェクト の作成
    	' ------------------------------------------------------
    	Set Stream = Server.CreateObject("ADODB.Stream")
     
    	' ------------------------------------------------------
    	' 入力用 Stream のオープン
    	' ------------------------------------------------------
    	Stream.Open
     
    	' ------------------------------------------------------
    	' Stream タイプをテキストとして指定
    	' ------------------------------------------------------
    	Stream.Type = 2		' StreamTypeEnum の adTypeText
     
    	' ------------------------------------------------------
    	' 入力ソースのキャラクタセットを指定
    	' ------------------------------------------------------
    	Stream.Charset = "shift_jis"
     
    	' ------------------------------------------------------
    	' 既存ファイルの内容を入力 Stream に読み込む
    	' ------------------------------------------------------
    	Stream.LoadFromFile Server.MapPath( "sample.htm" )
     
    	' ------------------------------------------------------
    	' 出力用 Stream オブジェクト の作成
    	' ------------------------------------------------------
    	Set Stream2 = Server.CreateObject("ADODB.Stream")
     
    	' ------------------------------------------------------
    	' 出力用 Stream のオープン
    	' ------------------------------------------------------
    	Stream2.Open
     
    	' ------------------------------------------------------
    	' 出力ファイルのキャラクタセットを指定
    	' ------------------------------------------------------
    	Stream2.Charset = "euc-jp"
     
    	' ------------------------------------------------------
    	' Stream オブジェクトのコピー
    	' ------------------------------------------------------
    	Stream.CopyTo Stream2
     
    	' ------------------------------------------------------
    	' ファイルへ上書き出力
    	' ------------------------------------------------------
    	Stream2.SaveToFile Server.MapPath( "sample.htm" ), 2
     
    	' ------------------------------------------------------
    	' Stream を閉じる
    	' ------------------------------------------------------
    	Stream2.Close
    	Stream.Close
     
    	' ------------------------------------------------------
    	' Stream オブジェクト の解放
    	' ------------------------------------------------------
    	Set Stream2 = Nothing
    	Set Stream = Nothing
     
    %>