■48595 |
Re[3]: VB.netで全角を含むURLのFTP接続について |
□投稿者/ 魔界の仮面弁士 -(2010/04/09(Fri) 11:50:51)
| ■No48592 (いただっく さん) に返信 >># そもそも 123.456.789.012 というアドレスが NG ですが、それは本題では無いので無視するとして。 > もちろんサンプルIPなのでお気になさらずにお願い致します。 IP なのに 255 を超えた値が記載されていたので、気になってしまいました。(^^;
> MS製のIISならやはり「ftp://localhost/test/ああああ/いいいい」と全角のPATHを送信しても大丈夫なんですね。 そうとも言い切れないと思います。IIS との間では ANSI が使われることになるため、 たとえば中国語のファイル名やディレクトリ名を送受信する事はできません。 http://support.microsoft.com/kb/332093/ja
実際、当方環境で "ニイハオ" の漢字 2 文字({イ+尓};{好})を使ったファイル名を LIST コマンドで受信してみたところ、"?好.txt" を意味する 3F/8D,44/2E/74/75/74 の バイナリが受信されました。(ちなみに "ああ.TXT" では 82,A0/82,A0/2E/54/58/54。)
>>> 3.そもそも「ftpRes.ResponseUri.AbsoluteUri」のURLで接続にいっているのでしょうか? >> 強いて言えば AbsoluteUri の方ですが、そもそも実際の FTP 処理では、%FF%FF…形式の文字列は使われていないはずです。 > 「強いて」ということは、VB側でURLはAbsoluteUriだが、 これは、No48541 の u1 / u2 変数でチェックしたときに、そのどちらでも通信が成功し、 かつ、両者の AbsoluteUri が同一であったことからの推測です。(当然、OriginalString は異なる)
> FTP処理をかける際には更に変換されているということですか。 FtpWebRequest の内部実装を追ったわけではないので、実際の所はどうだか分かりませんが、 少なくとも通信内容をキャプチャーしてみたところ、先のような結果が得られました。
なお正確に言えば、先述した >> ←サーバーから "230" が返され認証成功。入力待ちになる。 >> →クライアントから "LIST test/ああああ/いいいい" コマンドが渡される。≪ %FF%FF 形式では無い この部分(ログイン直後)に、クライアントから "OPTS utf8 on" というコマンドも送出されていました。 サーバーからは未サポートを示す "501" が返されていたので、処理としては無視されたようですけれどね。
> 最終的なやりとりは(RequestやResponse)は環境が異なっても上記みたいにやりとりされているんですね。 > 勉強になりました。 やりとりの内容については、Microsoft ネットワーク モニタでキャプチャできます。 http://blogs.technet.com/netmon/
FTP そのものの仕様については、RFC959、RFC2640 等で確認してみて下さい。
> Requestする際は、FTPサーバの環境に変換した文字コードで > 送信する必要がある!ということですね。 FtpWebRequest 以外の対処方法としては、Socket クラスで FTP クライアントを自力実装するとか。
>>中には、指定していたパスが間違っていた場合にも空の一覧を返して、コマンド自体は正常とみなす実装もあるかも知れません。 > パスが存在しない=空フォルダ と返しているのかも知れませんね。 実際のところはどうでしたか? (私は CentOS の事を知りませんので、真偽を検証できません) 明らかに存在しないフォルダ(というかディレクトリ)のパスを、意図的に指定する事は容易ですよね。 |
|