But here comes Windows!
O Windows não tem nada a ver com isso. Você poderia reproduzir este mesmo comportamento exato com uma instância local do (digamos) Terminal GNOME, com codificação de terminal apropriadamente selecionada e localidade apropriadamente configurada para ls
, sem que nenhum Windows esteja na imagem de todo . / p>
A única coisa que o Windows faz é mostrar claramente o que está acontecendo aqui. Seu programa FTP do Windows está tomando os bytes nos nomes dos arquivos e exibindo-os como os pontos de código relevantes na página de código 1252. Isso, uma codificação de byte único com quase tudo acima de 0x1F um glifo imprimível, nos diz exatamente quais bytes em seus nomes de arquivos .
Seu segundo nome de arquivo é em grande parte não informativo, mas o primeiro e o terceiro são reveladores.
- O primeiro nome do arquivo é a sequência de bytes
63
61
66
c3
a9
2d
32
2e
70
6e
67
- na página de códigos 1252, esta é %código%. É também a codificação UTF-8 decafé-2.png
. - O terceiro nome do arquivo é a seqüência de bytes
café-2.png
63
61
66
e9
2e
70
6e
- Na página de códigos 1252, isso é67
. Não é, no entanto, uma codificação UTF-8 válida.café.png
inicia uma sequência de codificação de caracteres incompleta.
Então o que está acontecendo é que as coisas são não usando a página de código 1252 mas que estão usando UTF-8, ou seja, sua sessão SSH e seu emulador de terminal local, estão manipulando o válido UTF-8 da mesma forma que os outros, mas estão lidando com o inválido UTF-8 de duas maneiras diferentes:
- Aquele que está exibindo o gráfico de bloco provavelmente está usando o gráfico de bloco como o caractere de saída de substituição para seqüências UTF-8 inválidas.
- Aquele que está exibindo a letra
e9
está retornando à Página de código 1252 quando encontra uma codificação inválida.
Seu problema subjacente é um sistema que de alguma forma gera alguns nomes de arquivos codificados como UTF-8 e outros nomes de arquivos codificados na Página de código 1252.