Nao consigo retirar acentuação de String e nem identificar o encoding da mesma, o que fazer?
15 respostas
R
renatomattos2912
Bom dia,
Estou com um problema na acentuação no eclipse, ja alterei o encoding text e tudo mais e até resolveu em determinada situação, mas o caso é o seguinte, estou usando geolocalização atraves dos webservices do google, esses webservices me retornam um XML que é onde eu pego a cidade pela qual o usuario esta acessando meu site e a partir dessa cidade capturada eu redireciono a home do meu site para a url/cidade, que é para eu poder trabalhar os dados que exibirei para aquele usuario de acordo com a localização dele, tipo um peixe urbano da vida, enfim, digamos que a cidade capturada seja são paulo, o problema que esta ocorrendo é que preciso tirar o acento e transformar isso em sao-paulo mas tentei cidade.replace(“ã”,“a”); e nao funcionou, ae dei um system.out.print(cidade) e saiu impresso no console “S??o Paulo”. Ok a partir disto tentei mudar o encoding da palavra para tudo quanto eh tipo e nada funciona, nao sei mais o que fazer, alguem tem alguma ideia de como me ajudar?
Já tentou remover os acentos com algum método utilitário? Não sei dizer se vai funcionar. Algo assim:public static String removerAcentos(String str){
return Normalizer.normalize(str, Normalizer.Form.NFD).replaceAll("[^\\p{ASCII}]", "");
}
R
renatomattos2912
Rodrigo Sasaki:
Já tentou remover os acentos com algum método utilitário? Não sei dizer se vai funcionar. Algo assim:public static String removerAcentos(String str){
return Normalizer.normalize(str, Normalizer.Form.NFD).replaceAll("[^\\p{ASCII}]", "");
}
Bom dia Rodrigo, entao cara, ja havia tentado esse metodo, inclusive é o q eu uso normalmente para retirar acentuação, mas ao inves de retirar o acento neste caso citado, este metodo remove a letra inteira, ficando so paulo
R
Rodrigo_Sasaki
Então você realmente precisa acertar o encoding
Por que não usa uma dessas ferramentas HTTP do browser pra descobrir o encoding da resposta? Provavelmente está nos headers.
olhando o encoding dele aparentemente é UTF-8, mas se fosse realmente isso eu nao teria problema, pq UTF-8 sei resolver, por algum motivo esta vindo com um encoding diferente.
Obs: nesse XML do link, não só sao paulo como qualquer palavra acentuada apresenta o problema
R
Rodrigo_Sasaki
Cara, eu li ele como UTF-8 e não tive problemas de encoding, usei o seguinte código: public static void main(String[] args) {
BufferedReader br = null;
Reader decoder = null;
try{
URL url = new URL(
"http://maps.googleapis.com/maps/api/geocode/xml?latlng=-23.4531013,-46.6145920&sensor=false&language=pt_br®ion=br");
InputStream is = url.openStream();
decoder = new InputStreamReader(is, "UTF-8");
BufferedReader buffered = new BufferedReader(decoder);
String line = "";
while ((line = buffered.readLine()) != null){
System.out.println(line);
}
} catch (IOException e){
e.printStackTrace();
} finally{
try{
if (br != null)
br.close();
if (decoder != null){
decoder.close();
}
} catch (IOException e){
e.printStackTrace();
}
}
}
R
renatomattos2912
Realmente, testei seu codigo e ele nao apresentou problemas, porem queria saber se vc consegue me ajudar a adaptar este seu codigo para me devolver apenas um determinado valor do xml, que é o que acontece no codigo que estou usando agora, ele me retorna só são paulo, que é o que eu preciso, segue abaixo o codigo que estou usando agora, e que por algum motivo esta apresentando problemas com a acentuação:
Por que você está lendo assim? Por que não utiliza Readers e Writers?
R
renatomattos2912
Entao, esse codigo ae foi uma recomendação do proprio google, achei q fosse a melhor solução, e particularmente nao tenho muita experiencia em ler xml, essa eh minha primeira empreitada, nem sei como ler uma tag especifica de xml usando readers como vc falou. vc tem algum exemplo?
R
Rodrigo_Sasaki
O que eu postei é um exemplo
R
renatomattos2912
Ah sim, mas o seu exemplo le o arquivo xml inteiro e não separa pelas tags.
R
Rodrigo_Sasaki
Mas você faz isso só depois… quando você faz output.toString()Gere a String do XML com o código que eu postei, e a partir daí pode usar o seu mesmo.
R
renatomattos2912
AHH entendi, vou tentar aqui, muito obrigado mesmo pela ajuda
R
Rodrigo_Sasaki
Sem problemas, se tiver mais alguma dúvida aí é só postar
R
renatomattos2912
Voltei huauha.
Entao cara, embuti o seu metodo no meu e fiz tudo rodar, porem, o problema continuou o mesmo, ae acabei descobrindo que o problema esta em apenas uma linha, e independe de eu utilizar o metodo na minha versao ou com o codigo que vc me mandou. O problema esta justamente no output.write(line.getBytes(“UTF-8”)); Eu dei um print no xml antes de rodar o output.write e depois de rodar, e para minha surpresa, o q rodou antes sai correto e o q rodou depois sai com todos os acentos quebrados, e nisso voltamos a estaca zero pq ate agora nao consegui resolver de novo, ja tentei tudo quanto é encoding no write, pele menos a estaca zero tem uma linha focada agora uhauha. se tiver mais alguma sugestao eu agradeço a ajuda, de qualquer forma, segue o metodo como esta agora, com os prints antes e depois do write, se puder rode ele na sua maquina e veja com seus proprios olhos huauha: