none
HyperLink使用時のNavigateUrlの文字化け及び接続不可 RRS feed

  • 質問

  • Visual Web Developer 2008 Express Editionで
    WebツールのHyperLinkで絶対パス;"日本語名.xls"ファイルを指定すると文字化けし、接続不可となります。

    ところが、
    Visual studio2003 では同様に作成したものは、日本語名ファイルでも全く問題ありません。

    どこが違うのでしょうか?よきアドバイスお願いします。




    2009年8月11日 7:24

回答

  • > IE8ではダメというのは、ショックです。将来的には、IE8に社内PCも変わるだろうし、 
    > わざわざ、WEBサーバーにファイルのコピーを置くのは、不効率の一言です。

    日本語.xls ファイルは現在の場所(ファイルサーバーの共有フォルダー?)に置いておくとして、そのフォルダ
    を IIS の仮想ディレクトリに設定することができ、あとは認証の問題が解決できれば、すべてうまくいきそうな
    気がします。それは検討してみましたか?

    2009年8月18日 14:10
  • 自動的にURLエンコーディングされているだけじゃないでしょうか?
    手元で試した場合、URLエンコーディングはされますけど正しく接続できましたよ。
    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    2009年8月11日 8:15
  • 自分も試してみましたが、結果は小野さんと同じで、サーバーからの HTML 出力は URL エンコーディングされ
    ますが、リンクをクリックすれば xls ファイルは問題なくダウンロードされましたが。

    具体例は下記のとおりです。cak00770 さんの場合はどのようになるのでしょうか?

    <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/Data/日本語名.xls">HyperLink</asp:HyperLink>
             ↓
    <a id="HyperLink1" href="../Data/%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%90%8D.xls">HyperLink</a>

    ちなみに自分の環境は Vista SP2 + .NET 3.5 SP1 + IIS7 + VS2008 Pro SP1 で、ローカル IIS モードです。

    2009年8月11日 13:43
  • > ・・・文字化けせずに、うまくいきます。

    「文字化け」ではなく URL エンコーディングされた結果なんですけど・・・

    ASP.NET 1.1 の環境は持っていないので分かりませんが、ASP.NET 2.0 の HyperLink.NavigateUrl
    は、URL に使ってはいけない文字コード(日本語の2バイトコードなど)を自動的に URL エンコードするよ
    うです。

    何故、サーバー側でなくローカルディスクからファイルを取得するのか分かりませんが、file://... としてい
    るところに問題があるようです。

    file: では、ブラウザは Web サーバにアクセスせず、直接ローカルディスク上のファイルを、URL エンコー
    ドされたファイル名で開きに行くようです。だからファイルを開けないのだと思います。

    同じローカルディスク上のファイルでも、NavigateUrl="http://localhost/xxx/Data/日本語名.xls" とす
    ればうまくいきます(xxx を仮想ディレクトリに設定する必要はありますが)。これは、ブラウザから要求を受
    けた Web サーバーが、自動的に URL デコードしてからファイルを取得し、ブラウザに送るからだと思いま
    す。

    cak00770 さんの解決手段、<a href="file:///C:\xxx\Data\日本語名.xls" ... のようにするというのも、
    IE6 と IE8 のほぼデフォルトのセキュリティ設定で試してみましたが、IE6 なら開けるものの、IE8 ではダメ
    でした。ついでに、FireFox 3.0.10、Opera 9.64、Safari 4.0.2 でも試してみましたがデフォルト設定では
    ダメでした。

    というわけで、できれば、Web サーバー上にファイルを置いて、それを取得するのがよさそうです。

    2009年8月12日 13:17

すべての返信

  • 自動的にURLエンコーディングされているだけじゃないでしょうか?
    手元で試した場合、URLエンコーディングはされますけど正しく接続できましたよ。
    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    2009年8月11日 8:15
  • 自分も試してみましたが、結果は小野さんと同じで、サーバーからの HTML 出力は URL エンコーディングされ
    ますが、リンクをクリックすれば xls ファイルは問題なくダウンロードされましたが。

    具体例は下記のとおりです。cak00770 さんの場合はどのようになるのでしょうか?

    <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/Data/日本語名.xls">HyperLink</asp:HyperLink>
             ↓
    <a id="HyperLink1" href="../Data/%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%90%8D.xls">HyperLink</a>

    ちなみに自分の環境は Vista SP2 + .NET 3.5 SP1 + IIS7 + VS2008 Pro SP1 で、ローカル IIS モードです。

    2009年8月11日 13:43
  • 小野@どっとねっとふぁんさん、surferOnWwwさん、ありがとうございます。


    実行環境:社内イントラネット用IIs5.1利用+windows 2000server+.NET3.5(asp.net2.0)

    エラーが出るコード↓
    <asp:HyperLink ID="HyperLink1" runat="server"
                            NavigateUrl="file:///データ\日本語名.xls">HyperLink</asp:HyperLink>

    但し、Visual Studio .NET 2003(.NET1.1, asp.net1.0)で作成し同様にテストすると文字化けせずに、うまくいきます。


    結局、
    aspのハイパーリンク使わずに下記コードなら文字化けもせず、ファイルも開きます。
    <a href="file:///データ\日本語名.xls"> >日本語名.xlsを開く</a>
    2009年8月12日 2:25
  • > ・・・文字化けせずに、うまくいきます。

    「文字化け」ではなく URL エンコーディングされた結果なんですけど・・・

    ASP.NET 1.1 の環境は持っていないので分かりませんが、ASP.NET 2.0 の HyperLink.NavigateUrl
    は、URL に使ってはいけない文字コード(日本語の2バイトコードなど)を自動的に URL エンコードするよ
    うです。

    何故、サーバー側でなくローカルディスクからファイルを取得するのか分かりませんが、file://... としてい
    るところに問題があるようです。

    file: では、ブラウザは Web サーバにアクセスせず、直接ローカルディスク上のファイルを、URL エンコー
    ドされたファイル名で開きに行くようです。だからファイルを開けないのだと思います。

    同じローカルディスク上のファイルでも、NavigateUrl="http://localhost/xxx/Data/日本語名.xls" とす
    ればうまくいきます(xxx を仮想ディレクトリに設定する必要はありますが)。これは、ブラウザから要求を受
    けた Web サーバーが、自動的に URL デコードしてからファイルを取得し、ブラウザに送るからだと思いま
    す。

    cak00770 さんの解決手段、<a href="file:///C:\xxx\Data\日本語名.xls" ... のようにするというのも、
    IE6 と IE8 のほぼデフォルトのセキュリティ設定で試してみましたが、IE6 なら開けるものの、IE8 ではダメ
    でした。ついでに、FireFox 3.0.10、Opera 9.64、Safari 4.0.2 でも試してみましたがデフォルト設定では
    ダメでした。

    というわけで、できれば、Web サーバー上にファイルを置いて、それを取得するのがよさそうです。

    2009年8月12日 13:17
  • SurferOnWwwさんありがとうございます。


    リンク先のファイルは、社内共有ドメインのファイルサーバーに有り、どうしても絶対パス(file:///日本語名\日本語名フォルダ\日本語名.xls)になります。

    驚きは、
    > <a href="file:///C:\xxx\Data\日本語名.xls" ... のようにするというのも、
    IE6 と IE8 のほぼデフォルトのセキュリティ設定で試してみましたが、IE6 なら開けるものの、IE8 ではダメ


    IE8ではダメというのは、ショックです。将来的には、IE8に社内PCも変わるだろうし、
    わざわざ、WEBサーバーにファイルのコピーを置くのは、不効率の一言です。

    今後、こういったケースでの作成は、ASP.NET2.0ではなく、1.0で作成することで、妥協します。残念・・・・

    2009年8月17日 1:46
  • > IE8ではダメというのは、ショックです。将来的には、IE8に社内PCも変わるだろうし、 
    > わざわざ、WEBサーバーにファイルのコピーを置くのは、不効率の一言です。

    日本語.xls ファイルは現在の場所(ファイルサーバーの共有フォルダー?)に置いておくとして、そのフォルダ
    を IIS の仮想ディレクトリに設定することができ、あとは認証の問題が解決できれば、すべてうまくいきそうな
    気がします。それは検討してみましたか?

    2009年8月18日 14:10


  • SurferOnWwwさんへ 

    >日本語.xls ファイルは現在の場所(ファイルサーバーの共有フォルダー?)に置いておくとして、そのフォルダ
    >を IIS の仮想ディレクトリに設定することができ、あとは認証の問題が解決できれば、すべてうまくいきそうな
    >気がします。それは検討してみましたか?

    試した結果、日本語名ファイルにかかわらず、うまくいけました。

    これで、将来的なIEのバージョンを心配する必要がなくなりました。

    解決策ありがとうございました。
    2009年8月19日 7:03
  • こんにちは、フォーラムオペレーターの高橋春樹です。

    小野@どっとねっとふぁんさん、SurferOnWwwさん
    いつもお世話になっております。
    動作確認をして頂き有難うございました。


    cak00770さん、初めまして。
    MSDNフォーラムのご利用有難うございます。

    回避策が見つかってよかったです(^-^)

    今回、小野@どっとねっとふぁんさんとSurferOnWwwさんに動作確認をして頂き、
    また、SurferOnWwwさんに問題解決に繋がるアドバイスを頂いた、
    と思いましたので、勝手ながら皆さんからのアドバイスに、
    回答マークを付けさせてもらいました。
    もし不適切と思いましたら、回答マークを削除することも可能です。

    今後ともMSDNフォーラムを宜しくお願いします。


    マイクロソフト株式会社 フォーラム オペレーター 高橋春樹
    2009年9月1日 7:20