最近、C# とか javascript とかで、ASP.NET をやっている。
当然、ヴィジュアル・スタディオ(笑)を使っている。 初めてやったから、まずプロジェクトってファイルを作るところまでに数日(^^;; C# も初めてなので、HTML 側と C# 側のつながりを理解するのに、さらに数日。 気分はスクリプトな web アプリなのに、 「ビルド」とかって正直なじめないしー(((^^;; まぁ C# 使うんだから仕方ないわな。 で、つまづいたことと、解決した方法。 もっと良い方法があったら、ご教示くださいませ。 C# と javascript で値を受け渡す方法☆C# から javascript //C# で設定 ☆javascript から C# //先に javascript で設定して postback してから C# で読み出し この場合、javascript はクライアント側で動くので、 そのあとにサーバ側の C# に戻さなくちゃならない。 流れとしては、C#(スルー)->javascript(設定)->C#(読み出し)になる。 hidden に設定してしまうと、ソース表示で値が見えてしまう。 見えてしまうのがイヤな場合は、Cookie に設定するしかないのかな。 Session じゃ、JavaScript では操作できないからな。 C# とjavascript の encode/decodeC# と javascript で、URL エンコード/デコードする関数と UTF-8 の文字列を入力にしたときの結果はこんな感じ。 C#: HttpUtility.UrlEncode(str) -> %aa%bb%cc 逆は HttpUtility.UrlDecode javascript: escape(str) -> %u1111%u2222 逆は unescape C# の方は UTF-8 の文字を 1 バイトずつエンコードするが、 javascript の方は、UTF-16(UCS-2?UCS-4?) を 1 文字ずつエンコードする。 デコード関数は、エンコードした文字列をデコードするので、 エンコード関数の結果が違うと、デコードできないわけで、 このままだと C# と javascript では相互にエンコード/デコードできない。 たとえば、C# で cookie を設定して、 javascript でデコードするような時は、 UTF-16 なバイト列を 2 バイトずつエンコードして cookie に設定しなくてはならない。 ちなみに、エンディアンも関係あるので、 そこも考慮しなくちゃならないっぽい。 javascript 側でやってもいいんだけど、 多分、C# の方がクラスが充実していて楽だと思う。 試行錯誤の結果がこれ。 すごくカコワルイ。 C# じゃないじゃん、これ(笑) もっとスマートなやり方があると思うので、 ぜひ教えてください。 // C# でエンコード C# の文字列は、文字列として出力させてみると UTF-8 なんだけど、 Windows の内部的には UCS-2(UCS-4?) で持っているので、 文字コード変換しなくて良いらしいよ。 ファイル出力も stream の文字コードを設定すると、自動変換するらしい。 なるほど java ぽいわ、って感じ。 追記(2008/08/16): javascript に encodeURIComponent / decodeURIComponent という 関数があるのを、コメントで教えていただいた。 実行してみた結果はこんな感じ。 /* 全半角混じりの文字列をエンコードしてみる */ encodeURIComponent を使うと、漢字も+も1バイトずつエンコードさるし、 デコードもできるっぽい。 なので、上記の自作関数を使って %u**** を作らなくても、 C# : HttpUtility.UrlEncode -> javascript : decodeURIComponent という組み合わせなら、無事に動きそう。 まだ試してないけど。 でも、半角ハイフンやアンスコやカッコをエンコードしたい時はどうするのだろう。 RFC 的にしなくていいから、しなくていいの?
by xiaoxia
| 2008-05-19 22:17
| プログラム言語
|
カテゴリ
以前の記事
2022年 12月 2021年 05月 2019年 12月 2018年 12月 2018年 05月 2018年 03月 2017年 03月 2017年 02月 2016年 08月 2016年 04月 more... 最新の記事
最新のトラックバック
ライフログ
今読んでる
その他のジャンル
記事ランキング
ブログジャンル
|
ファン申請 |
||