GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Problema com Acentuação


#1

estou com problema na acentuação quando o meu dispositívo móvel recebe um xml enviado pelo servidor

o problema realmente ocorreu quando mudamos o servidor que usava Windows Xp para um servidor Debian.

O dispositívo móvel que estou usando é um HTC S621 que roda Windows Mobile 5

até onde vih o problema é que em sistemas windows a formatação do texto se da usando o padrão ISO ... mas no Debian é UFT ...

alguns detalhes .. a comunicação mobile - server é feita via servlet
alguém já passou por algo assim?


#2

Sem olhar o código fica dificil.

Em tese o seu sistema envia um XML, logo vc tem que ver pq o seu sistema envia XML com o encoding diferente do esperado.

Ele tira os dados do xml daonde? de um banco de dados? são hard-coded? Tem q procurar a origem do erro e corrigir, ou forçar que a saida seja no encoding que vc quer.

São muitas variaves pra investigar, alguma coisa pode ter acontecido na migração do windows para o Debian. E o conjunto de caracteres padrão do Debian pode ser alterado :wink:


#3

Nesse caso, tu tem 2 opções:

primeira: Definir o teu XML como UTF-8, no servidor.

Segunda: Passar como parâmetro para a tua máquina virtual no dispositivo, o encoding ISO-8859-1. -Dfile.encoding=ISO-8859-1

Fernando Rosa


#4

Padrão Debian não pode ser alterado nesse caso ... a máquina não é minha ...

Os dados ele pega de um banco de dados ... mais especificamente SQL Server ... onde o banco de dados está num servidor Windows XP

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException {
		String msg = null;	
		DataOutputStream out = null;
		DataInputStream in = null;
		//String type = new String("ISO-8859-1");
		//String type = new String("UTF-8");
		try {
			// define o formato de resposta, que deixa o fluxo mais rapido
			response.setContentType("application/octetc-stream");
			//response.setContentType("text/plain;charset=UTF-8");
			//response.setCharacterEncoding("ISO-8859-1");
			//response.setCharacterEncoding("UTF-8");
			//request.setCharacterEncoding("UTF-8");
			out = new DataOutputStream(response.getOutputStream());
			in = new DataInputStream(request.getInputStream());
			if(request.getParameter("pes")!=null){ // envia pesquisa
				log.info("Mobile request xml");
				Document docXML = MobileXml.buildXML();
				out.write(convertToSendMobile(new XMLOutputter().outputString(docXML)));
				msg = new String("Send to mobile xml");
				log.info(msg);
				return;
			}
		} catch (IOException ioe) {
			if(msg!=null) log.error(msg);
		} finally {
			if (out != null) {
				try {
					out.close();
				} catch (IOException ioe) {
					ioe.printStackTrace();
				}
			}
			if (in != null) {
				try {
					in.close();
				} catch (IOException ioe) {
					ioe.printStackTrace();
				}
			}
		}
	}

private static byte[] convertToSendMobile(String text) {
		return text.getBytes();
	}

#5

Já tive problemas com encoding usando HTC, mas programando com Compact .NET Framework. Ele não suporta UTF-8. A única solução foi fazer com que o servidor enviasse em ISO-8859-1 mesmo. No caso, você disse que não tem acesso ao server, então a coisa complica :smile:


#6

Calma lá... vc disse que não tem acesso ao server físico ou à aplicação server-side?

Você pode alterar a aplicação server-side?


#7

eu não posso alterar as configurações do sistema operacional do servidor ...
o servlet que envia esses dados para o mobile eu posso alterar ...


#8

sugestão????


#9

essa solução foi adotada ... mas agora o erro se da assim
O jo?o est? em condi??es de uso?

.. repare que está trocando os caracteres especiais por ?

foi trocado tbm o enconding do sistema setando o locale pra pt_BR.ISO8859-1

dpkg-reconfigure locales e /etc/environment


#10