| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/08/2009 09:54:32
|
mizumoto
Debugger
![[Avatar]](/images/avatar/383e1febfb5246868b834d73c3344c86.png)
Membro desde: 12/09/2008 09:47:03
Mensagens: 71
Localização: Vitória - ES
Offline
|
Bom dia,
Executando
Eu obtenho um String[] contendo arquivos (e diretórios) contidos no diretório informado na variável path. Gostaria de submeter individualmente cada posição desse array a um método qualquer.
O problema que eu estou tendo aqui é que dentro do diretório informado (variável path) encontram-se alguns arquivos com nomes acentuados e os caracteres acentuados do arquivo estão sendo armazenados no array como "?".
Exemplo:
O arquivo Observación.doc está sendo armazenado como Observaci?n.doc.
Quando tento executar alguma operação sobre o arquivo informado nessa posição do array, recebo um FileNotFoundException, por q esse caracter foi substituído e não existe nenhum arquivo chamado "Observaci?n.doc".
Alguém sabe como posso resolver isso?
Obrigado
This message was edited 1 time. Last update was at 18/08/2009 09:55:40
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/08/2009 11:56:08
|
Marcio_Nogueira
JWizard
![[Avatar]](/images/avatar/0447abe5b3fbb484f70517e8a1091b4e.jpg)
Membro desde: 21/05/2007 20:14:54
Mensagens: 2781
Localização: xxxxxxxxxxxxxxxxxxxxxxxxxx
Offline
|
Normalmente não se acentua nomes de arquivos, pois pode causar erros.
|
MBA em Desenvolvimento de Sistemas em Ambiente Web
Bacharel em Desenho Industrial / Programação Visual
Marcio Nogueira C. Pinto |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/08/2009 12:01:21
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Isso é uma "não-solução". OK, eu também não gosto de nomes de arquivos com espaços, mas ele tem um problema a resolver.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/08/2009 12:35:48
|
mizumoto
Debugger
![[Avatar]](/images/avatar/383e1febfb5246868b834d73c3344c86.png)
Membro desde: 12/09/2008 09:47:03
Mensagens: 71
Localização: Vitória - ES
Offline
|
Eu também não gosto de acentuar nomes de arquivos, mas o sistema de arquivos que o programa analiza não está sob o meu controle e eu não tenho como impedir os usuários de criarem arquivos dessa forma.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/08/2009 12:36:55
|
Bruno Laturner
GUJ Expert
![[Avatar]](/images/avatar/5800ccd9514fd789d08e5831951aa6bc.jpg)
Membro desde: 18/02/2008 16:17:53
Mensagens: 3002
Offline
|
Tentei replicar aqui, mas está tudo certo. Com certeza é problema de encoding no SO, mas a JVM deveria tratar disso.
Já tentou usar o listfiles() no lugar de list()? Ele retorna os arquivos direto, e não os nomes.
|
A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/08/2009 12:47:10
|
bobmoe
GUJ Ranger
![[Avatar]](/images/avatar/9cc25407f209e031babdac7d3c520ccb.jpg)
Membro desde: 11/07/2006 20:45:48
Mensagens: 806
Localização: Sampa
Offline
|
pelo jeito, a codificação do sistema operacional está diferente da máquina virtual.
como vc tem uma array de string, pode pegar cada item e colocar a codificação correta. Na maioria dos casos é mudar de ISO-8859-1 para UTF-8 ou vice versa.
tem na api por getBytes(String charsetName) ou pelo construtor String(byte[] bytes, String charsetName).
parace q com os streams vc pode jogar os bytes da string em vez do objeto String direto q ai não da problema. Mas existem casos tb que vc não quer trabalhar com streams, como por exemplo apenas manipular o nome de arquivos.
|
BOB - Roberto Nogueira - bobmoe.blogspot.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/08/2009 13:22:55
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
O que é mais estranho é que não consegui replicar o seu problema. Eu tenho o seguinte programa:
Eu rodei o programa acima em um diretório contendo arquivos com nomes contendo letras acentuadas e espaços, e ele não me lançou nenhuma IOException referente a arquivos não encontrados. Será que é alguma outra coisa (por exemplo, você guardou os nomes em um banco de dados, e depois tentou pegar o nome com acentos - que veio errado, por algum motivo - e tentou localizar o arquivo?)
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/08/2009 13:47:41
|
mizumoto
Debugger
![[Avatar]](/images/avatar/383e1febfb5246868b834d73c3344c86.png)
Membro desde: 12/09/2008 09:47:03
Mensagens: 71
Localização: Vitória - ES
Offline
|
Bom... vamos por partes (Jack Estripador)
Para simplificar (ou piorar mais ainda) o problema, apresento abaixo o método dito... problemático:
Como podem observar, é um método simples que retorna de forma recursiva a estrutura de diretórios abaixo do caminho informado na variável path. Cada posição do array de saída será utilizada como parâmetro em um outro método qualquer. Como pode-se observar, esses dados não passaram por nenhum banco de dados.
Realmente o problema está parecendo mesmo ser de codificação conforme o que já foi sugerido aqui.
Observei que não consigo exibir bytes acima de 127. Entretanto entre 0 e 127, não possuo caracteres como "ç, á, é, í, ó, ú, ã, etc" o que me leva a pensar que esses devem ter valores superiores a 127. segue o exemplo (Usando getBytes como também já foi sugerido):
O número exibido na última linha deveria ser 140, entretanto o número 63 (endereço do caracter "?") é o que de fato aparece.
Como faço para mudar a codificação do sistema para resolver esse problema?
This message was edited 1 time. Last update was at 18/08/2009 13:56:39
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/08/2009 13:56:45
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Eu não trabalharia com String e sim com java.io.File. Seu código poderia ser assim:
Você precisa adaptar outras partes do seu programa para poder usar o método acima.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/08/2009 15:39:58
|
mizumoto
Debugger
![[Avatar]](/images/avatar/383e1febfb5246868b834d73c3344c86.png)
Membro desde: 12/09/2008 09:47:03
Mensagens: 71
Localização: Vitória - ES
Offline
|
thingol,
Adaptei o método que você sugeriu ao meu programa e também adaptei os métodos restantes para trabalharem com "File" no lugar de "String", entretanto o erro persiste.
Cada posição da lista obtida pelo método getTree() é submetida ao método getMD5Checksum() que por sua vez chama o método createChecksum().
O programa funciona muito bem até chegar ao arquivo /u/s0b4/2d/filed/préreq.txt, quando a seguinte exception ocorre:
Observe que eu não usei String em lugar nenhum, mas mesmo assim o programa substitui o "é" por "?".
Parece que inevitávelmente terei que resolver o problema da codificação, o problema maior é que eu não faço num idéia de por onde começar.
Podes me ajudar com isso?
Obrigado
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/08/2009 15:53:39
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Com um nome de arquivo estranho assim (/u/s0b4) isso é um AIX, Solaris, o quê? Talvez haja alguma sutileza ou bug mesmo.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/08/2009 15:58:54
|
mizumoto
Debugger
![[Avatar]](/images/avatar/383e1febfb5246868b834d73c3344c86.png)
Membro desde: 12/09/2008 09:47:03
Mensagens: 71
Localização: Vitória - ES
Offline
|
linux
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/08/2009 16:03:14
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Falar "linux" é igual a falar "Windows". Dá uma idéia aproximada mas não muito boa, se for algum problema ambiental.
Qual Linux? (Fedora, Ubuntu, SuSE etc.?)
Qual a versão do Java que você está usando? poste a informação de "java -version"
Qual a variável de ambiente que determina que linguagem está sendo usada? (echo $LANG)
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/08/2009 16:12:01
|
mizumoto
Debugger
![[Avatar]](/images/avatar/383e1febfb5246868b834d73c3344c86.png)
Membro desde: 12/09/2008 09:47:03
Mensagens: 71
Localização: Vitória - ES
Offline
|
Linux:
Red Hat Enterprise Linux WS release 3.8 (Final)
Linux es000482 2.4.21-47.ELsmp #1 SMP Tue Aug 1 08:12:32 EDT 2006 x86_64 x86_64 x86_64 GNU/Linux
Java:
java version "1.6.0_06"
Java(TM) SE Runtime Environment (build 1.6.0_06-b02)
Java HotSpot(TM) Server VM (build 10.0-b22, mixed mode)
Variável LANG:
C
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/08/2009 16:22:34
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Hum... LANG é C? Será que mudando para um outro valor (como
antes de rodar seu programa ajudaria alguma coisa?
|
|
|
 |
|
|