私のファイル名がLinuxでは「正常」に見えますが、Windowsではリモートで見えないのはなぜですか?

私のファイル名がLinuxでは「正常」に見えますが、Windowsではリモートで見えないのはなぜですか?

同僚との作業中にエンコーディングに関連しているように見える奇妙な問題を発見しました。私たちは十分に単純なファイル名(例えば、または)を持ついくつかのcity.gif画像を扱っていますが、wine.gif期待どおりに特殊文字(例えばé、、、)を使用するとë状況がより複雑になりますà。また、これらの文字を含むオランダ語のデータも処理しています。例えばcaféバー)。 (私たちはファイルのソースを制御できません。)ここで問題が発生し始めます。次のファイル名は単なる例です。この問題は、分音符付きの他の文字でも発生します。

café-2.png
cafetaria.png
café.png

最初の項目と最後の項目にはアクセントが必要です。金利そこ(アクセントaigu、é)。 Linux(CentOS 6および7)ランタイムが端末に表示される方法ls。しかし、Windowsが来る! (Windows 10、64ビットを使用)WindowsがSSL経由でサーバーに接続した後に呼び出すと、上記のリストlsは次のようになります。

café-2.png
cafetaria.png
caf▒.png

予想通り、最初の行にはまだアクセントがあります。金利 éしかし、3番目ではありません。代わりにこの文字が表示されます。 Unicode(10進数9618)ですmedium shade。これはそれ自体で奇妙です。ただし、Filezilla(まだWindowsで)を使用してSFTP経由で接続すると、次のようになります。

café-2.png
cafetaria.png
café.png

これで状況が反転しました。最初はé順序が変更され、3番目はすべてが正常です。私が見つけたここ私の言葉が正しいなら、これはLatin-1 <-> UTF-8変換が間違っているからである可能性が高いです。しかし、それがすべてであるわけではありませんか?

Linuxは私たちが期待していたすべてを見せ、Windowsはファイル名(SSH(putty)またはSFTP(filezilla))の見方によって一貫していないように見える動作を示しました。これらのファイル名を「標準化」(つまり編集)し、すべてのオペレーティングシステムで同じまたは少なくとも一貫性を維持する方法はありますか?では、どうすればよいですか?UTF-8私たちが選んだエンコーディングです。

これは単に審美的な問題かもしれませんが、そうではありません。 LinuxサーバーからWindowsのSFTP経由でコンテンツをダウンロードしようとすると、上記の問題のあるファイルをダウンロードできません。 FilezillaはCan't download file café-2.png: café-2.png does not exist on the server。 Filezillaはディレクトリとファイル名を読み取り、それをいくつかのエンコーディングとして解釈し、その解釈とともにGET要求をサーバーに送信するようですが、解釈がLinuxファイル名と異なるため、ファイルが見つかりません。

最終的に利用可能な解決策があれば良いでしょう。私も興味があるでしょう。なぜたまにはこんな場合もあります。イメージファイルが別のオペレーティングシステムで作成されたため、これは起こりますか? Linuxサーバーの誤った解釈が原因で起こりますか、それともWindowsが問題を引き起こしていますか?システム管理者に連絡してサーバー構成のスイッチをオンにするように要求できるソリューションがあることを望んでいますが、それほど簡単ではありません。

ベストアンサー1

しかし、Windowsが来る!

Windowsはこれとは関係ありません。たとえば、ls図に Windows がなくても、適切に選択された端末エンコードと適切に構成されたロケールを使用して、GNOME 端末のローカルインスタンスを使用して同じ動作を再現できます。別の言葉

Windowsが行う唯一のことは、ここで何が起こっているのかを明確に示すことです。 Windows FTP プログラムはファイル名のバイトを取得し、コード ページ 1252 の関連コード ポイントとして表示します。これは、0x1F(印刷可能文字)の上のほぼすべてを含むシングルバイトエンコーディングで、ファイル名に正確にどのバイトがあるかを示します。

2番目のファイル名は基本的に情報を提供しませんが、1番目と3番目のファイル名は非常に意味があります。

  • 最初のファイル名は一連のバイトです63 61 66 c3 a9 2d 32 2e 70 6e 67。これはコードページ1252です。café-2.pngまた、UTF-8でエンコードされていますcafé-2.png
  • 3番目のファイル名は一連のバイトです63 61 66 e9 2e 70 6e 67(コードページ1252)café.png。ただし、これは有効なUTF-8エンコーディングではありません。 e9不完全な文字エンコードシーケンスを開始します。

だから今何が起こっているのかいいえコードページ1252を使用しますが、UTF-8を使用すると、SSHセッションとローカル端末エミュレータが処理します。効果的なUTF-8は互いに同じ方法で処理されますが、無効UTF-8は2つの方法で提供されます。

  • ブロックグラフィックを表示する人は、単にブロックグラフィックを一般グラフィックとして使用している可能性が高いです。出力文字を置き換える無効なUTF-8シーケンスの場合。
  • この文字を表示するコードでé誤ったエンコードが見つかった場合は、コードページ1252に置き換えられます。

基本的な問題は、システムがUTF-8でエンコードされたいくつかのファイル名とコードページ1252でエンコードされたファイル名を生成することです。

おすすめ記事