problema de codificação de nome de arquivo

9

Estou recebendo um arquivo com um nome faroese e tentando salvá-lo em um script PHP:

2010_08_Útflutningur.xls

No Ubuntu 10.04, o LTS está salvando-o como:

2010_08_�tflutningur.xls (invalid encoding)

Eu instalei e executei utf8-migration-tool, mas sem efeito.

Este é um erro do Ubuntu que eu posso corrigir ou eu tenho que desistir e modificar o nome no php?

Existe um documento que indique qual é o conjunto de caracteres aceitável para um nome de arquivo no Ubuntu ou quais são as especificações de codificação?

obrigado

Elzo Valugi
fonte
Como você está recebendo e salvando o arquivo via PHP? (Como é o código como?)
Kees Cozinhe
Eu estava analisando a partir de um sistema de email. O código é complexo :)
Elzo Valugi 27/10/10
uma sessão de perguntas e respostas semelhante com um script para reparar nomes de arquivos quebrados.
Lumbric 17/03/2012

Respostas:

5

Parece um problema de codificação. Infelizmente, o PHP precisa de um pouco de manipulação manual quando se trata de codificações, porque suas strings são de byte único por padrão. Se você estiver criando o nome do arquivo no PHP, utf8_encode()deve ser útil; observe, no entanto, que ele assume a codificação ISO-8859-1 para a entrada.

Por outro lado, se você estiver usando o nome do arquivo enviado por um cliente, talvez possa solicitar que o cliente faça a codificação para você. Isso é feito com o accept-charsetatributo da <form>tag e / ou definindo o conjunto de caracteres da página em que o formulário está. Certos clientes podem usar um ou outro, portanto, para obter melhores resultados, use UTF-8 para cada um.

Eswald
fonte
7

Por padrão, o Ubuntu usa UTF-8 para nomes de arquivos. A maioria das distribuições Linux modernas e muitos outros sistemas operacionais o fazem (Windows / NTFS é a exceção mais conhecida no UTF-16).

Para corrigir arquivos que tenham nomes na codificação incorreta, como a que você mostra, tente usar nautilus-filename-repairer

sudo apt-get install nautilus-filename-repairer

Você pode usar as iconvfunções PHP para converter strings (nomes de arquivos) de uma codificação para a outra. É claro que isso exige que você saiba em que codificação eles estão.

Para obter nomes de arquivos codificados corretamente do cliente, tente a técnica explicada por eswald.

JanC
fonte