Devido a muitas trocas de arquivos entre o Windows ( codificação GBK ) e o Linux ( codificação UTF-8 ), ele encontrará facilmente problemas de codificação de caracteres, como:
- arquivos zip / tar cujo nome contenha caracteres chineses no sistema Windows, descompacte / descompacte-o no sistema Linux.
- execute o aplicativo da web java herdado migrado (projetado no sistema Windows, usando a codificação GBK no JSP) que grava arquivos nomeados pela codificação GBK no disco.
- O ftp obtém / coloca arquivos com o nome de codificação GBK entre o servidor FTP do Windows e o cliente Linux.
- alternar o ambiente LANG no Linux.
O problema comum do mencionado anteriormente é a localização / nomeação de arquivos. Após pesquisar no Google, recebi um artigo Usando o Unicode no Linux http://www.linux.com/archive/feed/39912 , que dizia:
o sistema operacional e muitos utilitários não percebem quais caracteres os bytes nos nomes de arquivo representam.
Portanto, é possível ter 2 arquivos .txt com codificação diferente:
[root@fedora test]# ls
???? 中文
[root@fedora test]# ls | iconv -f GBK
中文
涓iconv: illegal input sequence at position 7
[root@fedora test]# ls 中文 && ls $'\xd6\xd0\xce\xc4'|iconv -f gbk
中文
中文
Questões:
- É possível configurar o sistema de arquivos linux usando codificação de caracteres fixa (como o NTFS usa UTF-16 internamente) para armazenar nomes de arquivos, independentemente do ambiente LANG / LC_ALL?
- Ou o que realmente quero perguntar é: É possível permitir que o nome do arquivo 中文 .txt (
$'\xe4\xb8\xad\xe6\x96\x87.txt'
) no ambiente zh_CN.UTF-8 e o nome do arquivo 中文 .txt ($'\xd6\xd0\xce\xc4.txt'
) no ambiente zh_CN.GBK se refiram ao mesmo arquivo ? - Se não for configurável, é possível corrigir o kernel para converter a codificação de caracteres entre o sistema de arquivos e o ambiente atual (apenas uma pergunta, não solicitar implementação)? e quanto desempenho afeta, se possível?