Windows 共有に解凍すると、ファイル名のエンコードが tar によって UTF-8 に切り替わります

Windows 共有に解凍すると、ファイル名のエンコードが tar によって UTF-8 に切り替わります

当社には、製品を自由に画像に追加できるさまざまな Magento インストール (ウェブショップ) があります。製品に画像が追加されると、ファイルは特定の方法で命名され、特殊文字 (ドイツ語のウムラウトなど) が含まれることがあります。

現在調査しているケースでは、ファイル名は latin1 でエンコードされています。 をlsファイルに実行し、 を介してファイルを読み込むことで、それがわかりますvim。 を使用するとfileencoding=latin1、ウムラウトが正しく表示されます。

tar現在、これらの Magento インストールは、、7zipおよび(この順序で)によってバックアップされていますccrypt。これらを Linux で解凍すると、同じエンコーディングで同じファイル名が生成されます。

これで、Windows システム上に、解凍した Magento インストールを配置する共有が作成されました。ただし、解凍中に、ウムラウト ファイル名に関するいくつかのエラー メッセージが表示されます。

tar: var/magento_webs/customer/media/import/images/12063-sportsto\337d\344mpfer-hinten.jpg: Kann open nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: var/magento_webs/customer/media/import/images/15240-kunststoffkotfl\374gel-detail-vorne.jpg: Kann open nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: var/magento_webs/customer/media/import/images/14300-fl\374gel.jpg: Kann open nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: var/magento_webs/customer/media/import/images/15240-41kotfl\374gel-kunststoff-vorne.jpg: Kann open nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: var/magento_webs/customer/media/import/images/citr\366n.jpg: Kann open nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: var/magento_webs/customer/media/import/images/2cv6-ma\337e-1.jpg: Kann open nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: var/magento_webs/customer/media/import/images/2cv6-ma\337e.jpg: Kann open nicht ausführen: Datei oder Verzeichnis nicht gefunden
tar: var/magento_webs/customer/media/import/images/11076-vorschalld\344mpfer.jpg: Kann open nicht ausführen: Datei oder Verzeichnis nicht gefunden

(大まかに訳すとCannot execute open: File or directory not found

さて、tar のファイル名リストを見ると、tar は UTF-8 でエンコードされたファイル名 (\337 がそのように見えます) を作成しようとしているようです。ただし、マウント ポイントは (からetc/fstab) 経由で利用可能になっています:

//192.168.0.111/share   /mnt/share      cifs    username=myusername,noperm,sec=ntlm,codepage=cp850       0       0

これらのファイル名を、ウムラウト エンコーディングを保持する方法で共有に書き込むことができない理由がよくわかりません。別のオプションが欠けているのでしょうか (この場合、コード ページは間違ったオプションでしょうか)?

Remote character set編集 1: Linux ボックスに SSH 接続し、接続の を に設定しISO8859-15、共有ディレクトリに変更して、touchウムラウト付きのファイルを することで、同様のものを再現できます。

touch: kann â\244â nicht berÃŒhren: Datei oder Verzeichnis nicht gefunden

(X に触れられません: ファイルまたはディレクトリが見つかりません)

編集2: 解決策の最初の試み

マウント オプションを追加しiocharset=utf8、共有を再マウントしましたが、同じファイルでまったく同じ問題が発生しました。奇妙なことに、mount(通常はマウント ポイントがマウントされたすべてのオプションを印刷する) を使用しても、オプションは印刷されませんiocharset(設定としてutf8または のどちらも印刷されません)。cp850

答え1

以前 (バージョン 2.0 あたりだったと思います)、mount.cifs は "codepage=" オプションを失い、すべてを "iocharset=" オプションに配置するようになりました。

大丈夫だと思います

//host/share /mnt/share cifs username=blah,noperm,sec=ntlm,iocharset=utf8 0 0

関連情報