On Thu, Jan 1, 2009 at 14:39, André Warnier <a...@ice-sa.com> wrote: > I note with satisfaction that I'm not the only one laboring away on this > day-after, but you're just all going a bit too fast for me and my growing > but still limited Java knowledge.
No hang-over here. :-) > In other words, in order to keep my changes and post-festivities headaches > to a minimum, I would like to keep buf being a StringBuffer. So what I was > really looking for was the correct alternative to > buf.append((char) ic); > which would convert ic from an integer, to the appropriate Unicode > character, taking into account the "knownEncoding" which I know. > > Does that not exist ? (I'll leave the InputStreamReader explanation to Chuck.) I was guessing that the StringBuffer would soon be converted to a String (which is the usual case). If not … I don't see a simple one-line way to convert one byte to a character in a given charset. It looks like String and CharsetDecoder are the classes you're supposed to use. If there's an easy way to convert a single character, someone please point it out. How about this: Read the bytes as bytes, convert them to a String in the correct charset, and create a StringBuffer from that. Like so: String knownEncoding = "ISO-8859-1"; // or "ISO-8859-2" InputStreamReader fromApp; fromApp = = new InputStreamReader(socket.getInputStream(), int ic = 0; ByteBuffer inbuf = ByteBuffer.allocate(2000); while((ic = fromApp.read()) != 26 && ic != -1) // hex 1A (SUB) inbuf.put((char)ic); byte[] inbytes = new byte[inbuf.limit()]; inbuf.get(inbytes); String s = new String(inbytes, knownEncoding); StringBuffer buf = new StringBuffer(s); (I haven't tested this so it might not be correct.) It's not very efficient but it keeps the changes in one place. -- Len