This week's book giveaway is in the Jython/Python forum.
We're giving away four copies of Murach's Python Programming and have Michael Urban and Joel Murach on-line!
See this thread for details.
Win a copy of Murach's Python Programming this week in the Jython/Python forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic

socket encodeing problem  RSS feed

 
zb cong
Ranch Hand
Posts: 416
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
hello
i am now writing a program to BE connected by a bw4.2 application by using socket,it means that my program open the server port,the bw call my socket and send me a message that is XML format,the socket component of bw is configured to use the "utf-16le",my program run on a chinese version windoes2003 server,that use the "iso8859-1" or "gb2312" encoding.the code snippet of my program as following:

ServerSocket server = new ServerSocket(10001);
Socket client = server.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(
client.getInputStream()));
String inputLine = "";

while ((inputLine = in.readLine()) != null) {
String str=new String(inputLine.getBytes("iso8859-1"),"utf-16");
System.out.println(str);
}



and the bw send following message to my program:


<IncStatus>

<IncidentID>83700</IncidentID>

<TimeStamp>20/05/2004 13:58:34</TimeStamp>

<UserNameID>Bruce</UserNameID><WorkstationID>CLIENT1</WorkstationID>

<StatusID>3</StatusID>

</IncStatus>


but in my program,the the following is printed?

<IncStatus>?

<IncidentID>83700</IncidentID>?

<TimeStamp>20/05/2004 13:58:34</TimeStamp>?

<UserNameID>Bruce</UserNameID><WorkstationID>CLIENT1</WorkstationID>?

<StatusID>3</StatusID>?



as you can see,in the end of each line,ths sign "?" is added,and the tag "</IncStatus>" is missed.

who can help me,how can i deal with the encoding problem?
 
Jose Botella
Ranch Hand
Posts: 2120
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Let me state what I think you mean:
The server code page is "iso8859-1" but the client is sending bytes that were encoded from "utf-16le".


"new String(inputLine.getBytes("iso8859-1"),"utf-16");"

This won't do the trick. Here we are saying "encode inputLine into "iso8859-1" and then creates a new String from bytes that were encoded from "utf-16", which is not the case. That is, this technique cannot be used to convert between different encodings.

Try using "new BufferedReader(new InputStreamReader(
client.getInputStream(), "UTF16-LE"));"
this will translate the bytes received from the net --that were encoded from "utf16-le"-- into the 16 bits chars used in Java strings. The charset "iso8859-1" won't be used unless the information in the server is converted to bytes for writing to a socket or to a disk.

I hope it helps.
 
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!