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.

Foi útil?

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");
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top