47519


パスに使用するセパレータは、

  1. WEB用  
`//`

  2. WEB用(エスケープ付き)  
`////`

  3. ファイルパス用  
`\\\`

  4. ファイルパス用(エスケープ付き) ※Windows用ファイルパス  
`\\\\\\\`

をどういうときに、どれを使うべきか？  
について質問（確認）です。

javaのプログラム上でパスを作成する場合は、  
１と３

javaから、何かのAPIやミドルウェア等に処理依頼するときは、  
１または３の場合と、  
２または４の場合があるという理解で相違ないでしょうか？

※APIやミドルウェア等が、エスケープ付きの状態でinputを要求しているケースでは、  
実際のパスのセパレート文字の\、/を作りつつ、  
さらにエスケープシーケンスのための\、/を作る必要があるために2個分必要  
というケースがありうるため。


CC BY-SA 4.0
2018-08-10T15:33:49.810
47425
2018-08-21T15:14:14.677
2018-08-21T15:14:14.677
3068
29668
question
java
エスケープシーケンスと、パスの形式


後半について:

> エスケープシーケンスを考慮した文字

まず第一に、エスケープシーケンスという語を誤解しています。

エスケープシーケンスというのは "バックスラッシュ+文字" という2文字で特別な意味を持たせた文字のことです。今回登場しているものとしては `'\\\'`
が該当します(それ以外については末尾参考リンクを参照)。

繰り返しになりますが、エスケープシーケンスは「(特殊な書式の)文字」です。  
｢(特殊な書式の)文字を考慮した文字｣というのは意味が通じません。

したがって、

> (前略)と捉えていますが、間違っているでしょうか？

に対する回答としては、そもそも質問文として成立していません、となります。

エスケープシーケンスとかその辺の単語の意味は置いておいて、  
バックスラッシュを2つ重ねれば `\` が出力される、それを確認するには実際に出力してみる、

[code]

    System.out.println('\\');
    System.out.println("\\\\");
    
[/code]

で良いと思うのですがいかがでしょう。

前半の質問については、他の方がコメントされているとおり現在の文章では状況が正しく把握できないので回答不能です。  
(スラッシュとバックスラッシュは別物なので、一方が通って他方が通らないこと自体は取り立てて不思議なことではないと思いますが。)

参考:

  * [The Java™ Tutorials - Characters](https://docs.oracle.com/javase/tutorial/java/data/characters.html)


CC BY-SA 4.0
2018-08-14T16:33:13.140
47519
2018-08-14T16:33:13.140
2808
47425
answer


他の方のコメントや回答に有るように、色々と混同したり、勘違いしているように見受けられますので、URL、Javaの文字列リテラル、OSごとのパスの区切り文字など、それぞれの仕様を把握されると全体的に理解できるのかなと感じました。

その上で、回答がついてないところだけ 書きますと

ブラウザの場合は、手元の環境で試したところ、HTTPサーバーのアクセスログを見ても区切り文字は常に `/` なので、ブラウザが `\` を `/`
に置き換えて、サーバーにリクエストしていると思います。

エラーメッセージの区切り文字が `\` に置換されて表示されたというのは、ご質問の `http:testSite/hogehoge/test.html`
の場合は、先頭にスキーム（`scheme://`形式) がありませんので、URLの構文になっておらず、そもそもが
URLとは認識されてないので、ローカルファイルパスと解釈された為ではないか、と思います。このへんは推測なので違うかもしれません。


CC BY-SA 4.0
2018-08-15T07:05:42.770
47534
2018-08-15T07:05:42.770
5008
47425
answer


まず、確認ですが、Windows上の話でしようか?  
Unix(Linux)上でのバス区切り文字は常に **/** です。 **\** は、常にエスケープ文字扱いです。 (ここの書込みも同様?)

これが、Windows世界だと、ディレクトリ区切り文字も、 **\** で エスケープ文字と同じになります。 ( / は引数に使われた)

URLの指定(形式)は、Unixから、来ていますので、ディレクトリ区切りは _/_ で、/ から始まるとローカルルートからのパス、//
はスーパールートで外部となります。 Windowsでは、これがそのまま、 **\** に置き換えられますが、URLに指定する場合、/ となります。

なお、

> ｢¥｣区切りの方のパスをコピペして、  
>  改めてブラウザに張り付けてリクエストすると、

Windows上のブラウザは大抵、\ 区切りを / とみなします。 (Linux上は、知らない)


CC BY-SA 4.0
2018-08-15T09:36:03.977
47541
2018-08-15T09:36:03.977
47425
answer