
Estamos processando arquivos que nossos clientes geraram em suas máquinas Windows locais que usam o conjunto de caracteres CP-1252. Ocasionalmente, ao processar um desses arquivos em nosso backend (executando no CentOS), obtemos erros de tempo de execução (é um backend Java, portanto RuntimeExceptions
). Se acessarmos remotamente o servidor, renomearmos o arquivo (usando UTF-8) e executá-lo novamente, o arquivo será processado perfeitamente.
Existe alguma maneira de "adicionar" o CP-1252 aos conjuntos de caracteres disponíveis do CentOS para que isso pare de acontecer?
Responder1
Confira este relatório de bug da Oracle sobre o comportamento do Javabug_id=4733494relacionado ao "localidade padrão". De acordo com este relatório de bug (na verdade, a Sun/Oracle diz que esse comportamento não é realmente um bug, mas apenas como o Java foi projetado), da Sun/Oracle:
Nas versões do JDK anteriores à 1.4, sempre forçamos o código do idioma "C" para o conjunto de caracteres ISO8859-1. Nas versões 1.4 e posteriores, oferecemos suporte ao código de idioma "C", que requer restrição para ASCII de 7 bits.
A recomendação é definir a variável de ambiente LC_ALL
como en_US.ISO8859-1
ou qualquer que seja o local apropriado para o sistema es_ES.ISO-8859-1
, etc.
Adicionando:
export LC_ALL="en_US.ISO-8859-1"
O arquivo de comando que executa seu back-end Java deve resolver o problema.
Isso também está documentado na pergunta SO:https://stackoverflow.com/questions/5663709/how-to-fix-java-when-if-refused-to-open-a-file-with-special-charater-in-filename