Leitura cordas UTF8 de um servidor através de HTTP utilizando MIDP
Pergunta
Eu quero ler UTF-8 cordas de um servidor que eu tenho o controle, usando java MIDP. Meu servidor está enviando dados UTF-8. O código a seguir se aproxima:
c = (StreamConnection) Connector.open(
myServer, Connector.READ_WRITE);
InputStream is = c.openInputStream();
StringBuffer sb = new StringBuffer();
int ch;
while((ch = is.read()) != -1)
sb.append((char)ch + "->" + ch + "\n");
I imprimir o caractere e seu código para fins de depuração. Eu acho que está lendo caracteres ASCII aqui, então, quando eu tiver algum caractere que tem o seu código acima 127 então eu recebo dois caracteres, como os dois exemplos abaixo:
letra a. UTF código E1 (hex). Recebo 195 e depois 161
letra o. UTF código F4 (hex). Recebo 195 e depois 180
A minha pergunta é, existe uma maneira para eu ler caracteres UTF diretamente. Eu encontrei algumas soluções na web, mas nenhum se encaixa para o MIDP.
Solução
Em vez de ler bytes, ler caracteres. Use um InputStreamReader API para converter bytes em caracteres e executar através do codificador UTF-8. Deve ser suportado como parte da JavaME CLCA (JSR 30) de perfil; É aí que o link aponta.
Tente algo parecido com isto:
c = (StreamConnection) Connector.open(
myServer, Connector.READ_WRITE);
Reader r = new InputStreamReader(c.openInputStream(), "UTF-8");
StringBuffer sb = new StringBuffer();
int ch;
while((ch = r.read()) != -1)
sb.append((char)ch + "->" + ch + "\n");