problema de codificação de nome de arquivo

9

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

2010_08_Útflutningur.xls

No Ubuntu 10.04 LTS está salvando 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 apenas tenho que desistir e modificar o nome em php?

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

Obrigado

    
por Elzo Valugi 26.10.2010 / 14:58

2 respostas

5

Isso parece um problema de codificação. Infelizmente, o PHP precisa de um pouco de mão 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 atributo accept-charset da tag <form> e / ou definindo o conjunto de caracteres de a página em que o formulário está. Certos clientes podem usar um ou outro, então, para melhores resultados, use UTF-8 para cada um.

    
por eswald 26.10.2010 / 19:18
7

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

Para corrigir arquivos com 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 funções iconv do PHP para converter strings (nomes de arquivos) de um codificação para o outro. É claro que isso exige que você saiba em que codificação eles estão para começar.

Para obter nomes de arquivo codificados corretamente do cliente, você pode tentar a técnica explicada por eswald.

    
por JanC 26.10.2010 / 23:17