Ajax 日本語処理 ( ASP )

  通常のコードページで UTF-8 -> SHIFT_JIS



IIS 5以降では、コードページを指定する事によって、UTF-8 を処理する事が簡単になりましたが、あくまで、従来のコードページから UTF-8 の文字列を操作する方法を考えます。

※ コードページについての参考ページ

Microsoft へのリンク

※ 重要
Response.ContentType = "text/html" と Response.Charset= "shift_jis" は別々に設定してください。
Response.AddHeader( "Content-Type", "text/html; Charset=shift_jis" ) は使用しないで下さい。
Netscape 7.1 では、少なくとも問題が出ます ( ASP の都合 )

まず、クライアントから受けた「あ」という UTF-8 文字を表示してみます。
  
http://sv/aspTest/sjis.asp?value=%E3%81%82

<%
Response.ContentType = "text/html"
Response.Charset= "shift_jis"
Response.ExpiresAbsolute=#May 31,2000 23:59:59#

Response.Write Request.QueryString( "value" )

%>
  

上記結果では、「縺」と返されます。これは、E381 なので、まさにそのまま返された事が解ります。しかし、82 が取り去られているのは、QueryString( "value" ) で、SHIFT_JIS として不適格なせいです。ですから、%E3%81%82 の時点でバイナリとして処理する必要があります。

( ※ CAPICOM.Utilities については、こちら を参照して下さい )

  
<%
Response.ContentType = "text/html"
Response.Charset= "shift_jis"
Response.ExpiresAbsolute=#May 31,2000 23:59:59#

Set Stream = Server.CreateObject( "ADODB.Stream" )
Set CAPIUtil = Server.CreateObject( "CAPICOM.Utilities" )

Stream.Open
Stream.Position = 0
Stream.SetEOS
Stream.Charset = "utf-8"
Stream.Type = 1 ' バイナリ

aData = Split( Request.QueryString, "=" )
strChar =""
For I = 1 to Len( aData(1) )
	strChar = Mid( aData(1), I, 1 )
	if strChar = "%" then
		I = I + 1
		strChar = ChrB(CLng( "&H" & Mid( aData(1), I, 2 ) ))
		I = I + 1
	else
		strChar = ChrB(Asc(strChar))
	end if

	ByteArray = CAPIUtil.BinaryStringToByteArray( strChar )
	Stream.Write ByteArray

Next

Stream.Position = 0
Stream.Type = 2 ' テキスト
Response.Write Stream.ReadText()

Stream.Close 
%>
  


このままでは使えないので、すべての QueryString を SHIFT_JIS に変換し、ディクショナリオブジェクトにセットして使用します

  
<%
Response.ContentType = "text/html"
Response.Charset= "shift_jis"
Response.ExpiresAbsolute=#May 31,2000 23:59:59#

Set Stream = Server.CreateObject( "ADODB.Stream" )
Set CAPIUtil = Server.CreateObject( "CAPICOM.Utilities" )
Set MyData = Server.CreateObject("Scripting.Dictionary")

' **********************************************************
' UTF-8 入力文字列の変換
' **********************************************************
Function ConvertQueryString()

	Dim InData,nData,aData,I,strChar

	Stream.Open

	InData = Split( Request.QueryString, "&" )
	For nData = 0 to Ubound( InData )
		
		Stream.Position = 0
		Stream.SetEOS
		Stream.Charset = "utf-8"
		Stream.Type = 1 ' バイナリ

		aData = Split( InData(nData), "=" )
		strChar =""
		For I = 1 to Len( aData(1) )
			strChar = Mid( aData(1), I, 1 )
			if strChar = "%" then
				I = I + 1
				strChar = ChrB(CLng( "&H" & Mid( aData(1), I, 2 ) ))
				I = I + 1
			else
				strChar = ChrB(Asc(strChar))
			end if

			ByteArray = CAPIUtil.BinaryStringToByteArray( strChar )
			Stream.Write ByteArray

		Next

		Stream.Position = 0
		Stream.Type = 2 ' テキスト
		MyData( aData(0) ) = Stream.ReadText()

	Next

	Stream.Close 

End Function

Call ConvertQueryString()

' shift_jis で比較
if MyData("value") = "送信" then
	sjis = "送信を受信しました"
end if

Response.Write sjis

%>
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加




SQLの窓  天気  IT用語辞典
Yahoo!ニュース  マルチ辞書
PHP マニュアル  Google URL短縮 


フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ