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
Respostas:
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-charset
atributo 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.fonte
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
Você pode usar as
iconv
funçõ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.
fonte