予備的なコメント:
-
sftp必須 ファイル名のエンコーディングとして UTF-8 を使用します (たとえば、こちらを参照してください)。ただし、その要件に従わず、仕様に違反しているクライアントとサーバーがあり、それが問題の原因である可能性があります。
-
あなたは次のように書いています:「AcceptEnv LANG LC_* をコメントアウトしたことに注意してください。ここによれば、これはサーバーがクライアントがロケール環境変数を渡すことを許可しないことを意味します。」
これがどのように機能し、何に役立つかについて誤解があるかもしれません。 2 台のマシンが通信するときは常に、同じデータ形式を使用する必要があります。たとえば、VisualCron が ISO 8859-1 としてエンコードされたファイル名を Ubuntu サーバーに送信するバイト ストリームに入れるが、Ubuntu サーバーに受信 (ファイル名) バイト ストリームを UTF でエンコードされているかのように解釈させるとします。 8. 解決しない 問題、しかし原因
これを言った:
私は最初に、問題がどこで発生したかを正確に見つけようとします。 Ubuntu サーバーへの SSH アクセスまたは物理アクセス (キーボード) があることを強く前提としています。次に
-
ロケール
en_US.UTF-8
かどうかを確認します Ubuntuサーバーにまったくインストールされていません。LC_
を設定するだけであることに注意してください とLANG
環境変数はしない ロケールをインストールしてください。代わりに、OS のインストール時に、または
dpkg-reconfigure locales
のような方法でロケールをインストールします。 (debian の場合 - Ubuntu はわかりません)。 -
SSH を使用している場合は、SSH ターミナル ソフトウェア (Putty など) がサーバーと同じエンコーディングを使用していることを確認してください。
-
次に、最も重要なステップ:SSH 端末を 手動で 使用する Windowsラップトップのsftpクライアントがそれを見ることができるように、それぞれのディレクトリに問題のある名前のファイルを作成してください.
たとえば、質問に戻ると、
Liège.txt
という名前のファイルを作成できます あなたの/tickets
で ディレクトリ (touch /tickets/Liège.txt
)。再び SSH ターミナルを使用して、Ubuntu にそのディレクトリ内のファイルを一覧表示させるときに、ファイル名が正しく表示されることを慎重に再確認します (ls -al /tickets
). -
Windows ラップトップで sftp クライアントを使用して、新しく作成されたファイルが正しくダウンロードされるかどうかを確認してください。
これが機能する場合、VisualCron がファイルを Ubuntu サーバーに転送するときに問題が発生することを意味します。うまくいかない場合は、Windows ラップトップと Ubuntu サーバーの間に問題があります。
どちらの場合も、状況の分析に役立つツールがあります。
たとえば、ファイル名をあるエンコーディングから別のエンコーディングに変換できる convmv をいじってみると、ある程度の洞察を得ることができます。特に、ファイル名のエンコーディングを UTF-8 から UTF-8 に変換できます。 .その際、ファイル名がすでに UTF-8 でエンコードされていることが確実な場合は、その変換中に変更してはなりません。
また、chardet も調べてみてください。これは、たとえば のエンコーディングを推測しようとする Python ライブラリです。ファイル名。私は Python の専門家ではないので、ソース コードについてはお答えできません。この質問に対する受け入れられた回答によると、 chardet.detect(os.popen("ls yourfilename.txt").read())
のような行があります これにより、最も可能性の高いエンコーディングが信頼度とともに出力されます。
要約すると:
-
Ubuntu サーバー上のファイル名が 本当に 上記の手順に従い、上記のツールを使用して、UTF-8 でエンコードされます。
-
Ubuntu サーバーのファイル名が UTF-8 でエンコードされていることを完全に確認したら、ラップトップの sftp クライアントがファイルをダウンロードできるかどうかを確認します。そうでない場合は、うまくいくまで他のクライアントを試してください。
-
Ubuntu サーバー上のすべてのファイル名が UTF-8 でエンコードされているわけではないことがわかった場合は、それに応じて VisualCron の設定を調整してください。私は VisualCron を知らないので、それについてはお手伝いできません。