- PR -

Request.QueryStringで漢字の受け渡し

1
投稿者投稿内容
りょーつき
会議室デビュー日: 2002/09/25
投稿数: 4
投稿日時: 2002-09-25 14:27
初めて投稿します。よろしくお願い致します。

既存のASPアプリケーションをASP.NETに移植しています。
既存のASPの場合以下のようなリンクを動的に作成していました。

./result.asp?bukken=○○○株式会社様(○○製品)&customer_code=A001

これで問題なく動作していたのですが、ASP.NETの場合、

./result.aspx?bukken=○○○株式会社様(○○製品)&customer_code=A001

ASPがASPXに変わっただけなのですが、Request.QueryStringで
変数に値を代入すると、漢字の一部が文字化けしてしまいます。

○○E株式会社様(E○製品)のように、文字の一部が「E」な
どに変わってしまいます。

ContentEncodingプロパティを変更して色々試してみましたが、
同じように文字化けしてしまいます。

文字化けさせずにうまく値を受け渡す方法はないでしょうか?
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2002-09-25 15:19
HTMLEncodeあたりが使えるんじゃないかと。。。
DaikiRyuto
大ベテラン
会議室デビュー日: 2002/07/23
投稿数: 200
投稿日時: 2002-09-25 15:27
うーん。

HttpUtility.UrlEncodeメソッドでvalueになる文字列を囲ってみるとかで、どうでしょう。
りょーつき
会議室デビュー日: 2002/09/25
投稿数: 4
投稿日時: 2002-09-25 15:41
shuさん、DaikiRyutoさん 情報ありがとうございます。

HTMLEncodeもHttpUtility.UrlEncodeも知りませんでした。
ヘルプを見たら使えそうなんですが、ちょっと問題があります。

漢字の値はOracleに格納されており、

SELECT './result.aspx?bukken=' || BUKKEN || '&customer_code=.....

というようなSQLを作成し、結果をDataGridにbindしています。
で、DataGridのハイパーリンク列でそのURLの格納された列を参照
させています。

どこでHTMLEncode関数を使うのかが、よくわかりません。ASPですと
結果のテーブル出力時に関数を使って値を格納できそうなんですが、
DataGridの場合はどうすれば、良いでしょうか?
りょーつき
会議室デビュー日: 2002/09/25
投稿数: 4
投稿日時: 2002-09-25 17:48
自己レスです。

UrlEncode関数を使うために、SQLを見直し、Oracle Objects for OLEの
Dynasetから1行ずつループで回し、DataTableオブジェクトに格納して
DataGridにbindさせるよう変更しました。

DataTableに格納するとこころで、UrlEncode関数を使ったところうまく
行きました。

この方法が最良なのかどうかはわかりませんが、結果オーライです。
ソースはこんな感じです。

strSQL = "SELECT .... from ...."

OraSession = New OracleInProcServer.OraSessionClass()
OraDatabase = OraSession.OpenDatabase("oracle", "scott/tiger",OracleInProcServer.dbOption.ORADB_DEFAULT)
OraDyn_dat = OraDatabase.CreateDynaset(strSQL, CLng(4))
OraFields_dat = OraDyn_dat.Fields

Dim dt As DataTable = New DataTable()
Dim dr As DataRow

dt.Columns.Add(New DataColumn("BUKKEN"))
(中略)
dt.Columns.Add(New DataColumn("CUSTOMER_CODE"))

Do Until (OraDyn_dat.EOF)
dr = dt.NewRow()
dr(0) = "./result.aspx?bukken=" & Server.UrlEncode(OraFields_dat(0).Value)
 (中略)
dt.Rows.Add(dr)
OraDyn_dat.MoveNext()
Loop

Dim dv As DataView = New DataView(dt)
MyDataGrid.DataSource = dv
MyDataGrid.DataBind()

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)