Question

I want to read UTF-8 strings from a server that I have control of, using java MIDP. My server is sending UTF-8 data. The following code gets close:

        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 print the char and its code to debugging purposes. I think it is reading ASCII chars here, so, when I have some char that has its code above 127 then I get two chars, like the two examples bellow:

letter á. UTF code E1 (hex). I get 195 and then 161

letter ô. UTF code F4 (hex). I get 195 and then 180

My question is, is there a way for me to read UTF characters directly. I've found some solutions in the web but none fits to the MIDP.

Was it helpful?

Solution

Instead of reading bytes, read characters. Use an InputStreamReader API to convert bytes to characters and run through the UTF-8 encoder. It should be supported as part of the JavaME CLDC (JSR 30) profile; that's where the link points.

Try something like this:

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");
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top