Temos diversas instalações Magento (loja virtual) que permitem adicionar imagens gratuitamente a um produto. Quando uma imagem é adicionada a um produto, o arquivo é nomeado de uma forma específica que às vezes incorpora caracteres especiais (por exemplo, tremas alemães).
No único caso que estou investigando, os nomes dos arquivos estão codificados em latin1. Posso ver isso inserindo ls
um arquivo e depois lendo o arquivo via vim
. Usando o fileencoding=latin1
, os tremas são exibidos corretamente.
Agora, essas instalações do Magento são apoiadas por tar
e 7zip
( ccrypt
nessa ordem). Descompactar aqueles no Linux fornece os mesmos nomes de arquivos na mesma codificação.
Agora temos um compartilhamento em um sistema Windows onde gostaríamos de colocar a instalação não tarred do Magento. No entanto, durante a descompactação, uma série de mensagens de erro aparecem em relação aos nomes dos arquivos com trema:
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
(Isso se traduz aproximadamente como Cannot execute open: File or directory not found
)
Agora, olhando as listas de nomes de arquivos tar, posso ver que tar parece tentar criar nomes de arquivos codificados em UTF-8 (\337 parece assim). No entanto, o ponto de montagem foi disponibilizado via (de etc/fstab
):
//192.168.0.111/share /mnt/share cifs username=myusername,noperm,sec=ntlm,codepage=cp850 0 0
Não sei por que esses nomes de arquivo não podem ser gravados no compartilhamento de uma forma que preserve a codificação do trema. Estou faltando outra opção (a página de código é a opção errada para isso)?
Edição 1: posso recriar algo semelhante fazendo SSH na caixa do Linux, definindo a Remote character set
conexão como ISO8859-15
, mudando para o diretório de compartilhamento e touch
executando um arquivo com trema:
touch: kann â\244â nicht berÃŒhren: Datei oder Verzeichnis nicht gefunden
(Não é possível tocar em X: arquivo ou diretório não encontrado)
Edição 2: primeira tentativa de solução
Adicionei iocharset=utf8
as opções de montagem, remontei o compartilhamento, mas tive exatamente os mesmos problemas com os mesmos arquivos. Estranhamente, using mount
(que geralmente imprime todas as opções com as quais os pontos de montagem foram montados) não imprime a iocharset
opção (nem with utf8
nem with cp850
como configuração).
Responder1
Algum tempo atrás (acredito que entre a versão 2.0 ou mais), mount.cifs perdeu a opção "codepage=" e colocou tudo na opção "iocharset=".
Você deveria estar bem com
//host/share /mnt/share cifs username=blah,noperm,sec=ntlm,iocharset=utf8 0 0