|
■No53267 (やじゅ さん) に返信
> 1.ADOから返されるデータの値を16進値として表示
UTF-16 としての取得で良いなら、AscW 関数で充分です。
今回の場合、下記のようにすれば『7CFB7EDF』が得られるはず。
(VBS の文字列は、内部的には UTF-16 のバイナリで管理されています)
<p><%
Dim i, c
For i = 1 To Len(S)
c = AscW(Mid(S, i, 1))
If c <= 0 And c <= &HFF Then
Response.Write Right("00" & Hex(c), 2)
Else
Response.Write Right("0000" & Hex(c), 4)
End If
Next
%></p>
なお、ASP から出力された HTML がどのようにブラウザーに表示されるかは、
(1) HTTP 応答ヘッダー Content-Type
(2) <meta http-equiv="Content-type" content="〜">のタグ
(3) 実際にサーバーから送出されたバイナリー
に依存します。
特に問題になるのは (3)の部分ですが、これは下記のようになっています。
・Response.Write およびその略記である <%= %> で出力される文字列は、
Session.CodePage の影響を受ける。
・<%〜%> の外に直接書いた文字列(HTML タグ等)は、
ASP ファイル自体の文字コードで出力される。
・<% S = "テスト" %> といった VBScript の文字列リテラルは、
ASP の @CodePage ディレクティブの影響を受ける。
・Server.HtmlEncode を使うと、文字列が適切な内容に変換される。
変換結果は数値文字参照や文字実体参照に置き換わることがあるが、
そうした文字参照への変換が伴うかどうかは、上記の設定に依存する。
なお、Oracle 側が UTF-8 (というか AL32UTF8) であろうとそれ以外だろうと、
ADO 経由で得られる「文字列」は UTF-8 で符号化されたものでは無く、
UTF-16 相当で符号化されたデータとなるはずです――設定さえ正しければ。
# もしも生のバイナリを得たいなら、GetChunk などでバイナリとして
# 得る事になりますが、それを VBScript でとりまわすのは厄介かも。
|