我正在对正在阅读我正在发送的XML时遇到问题的商业应用程序进行故障排除。
我的应用程序是Java,商业应用程序是在Windows上用C#.NET 4.0编写的。 C#应用程序正在侦听原始XML的简单TCP套接字。我从字符串(XML)发送数据作为字节。 Java和C#代码都在同一主机上运行。数据通过localhost发送。
每个其他消息,C#应用程序响应错误,指示格式错误的XML。商业团队和我都为什么感到困惑。在调试器中,记录我发送的XML是有效的。但是,一旦它到达C#端;将一个或两个字符添加到XML声明中。
我们在日志中找到了什么:
Expected
<?xml version="1.0" encoding="ISO-8859-1" ?>
Observed
<?xml version="1.0" encoding="ISO-8859-M1" ?>
<?xml oversion="1.0" encoding="ISO-8859-1" ?>
<?=xml version="1.0" encoding="ISO-8859-1" ?>
我正在使用类似Java的东西发送到C#应用程序。
String request = "Whatever";
Socket clientSocket = new Socket(Host, Port);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()) ;
outToServer.writeBytes(request + '\n');
C#应用程序正在从线路接收数据,如下所示。
TcpClient tcpClient = (TcpClient)client;
NetworkStream networkStream = null;
byte[] array = new byte[tcpClient.ReceiveBufferSize];
string text = "";
this.lastTouched = DateTime.Now;
try
{
networkStream = tcpClient.GetStream();
do
{
int count = networkStream.Read(array, 0, array.Length);
text += Encoding.ASCII.GetString(array, 0, count);
}
我有一种感觉,我们都在这里犯错误;但它适用于具有相同代码的其他系统,我认为这是巧合。我们只是看到一个边缘案例。
思想?
答案 0 :(得分:1)
不要使用DataOutputStream
,而是使用该类而不是序列化,只要我理解,您就发送一个原始字符串。尝试直接使用OutputStream:
// for this to use the UTF-8 encoding in <?xml version="1.0" encoding="UTF-8" ?>
clientSocket.getOutputStream().write(request.getBytes("UTF8"));
您需要使用在getBytes(...)
中指定的编码以及XML文件中使用的编码<?xml version="1.0" encoding="..." ?>
在C#部分:
你确定字符串中的所有字符都是ASCII(你没有像Ñ这样的字符)吗?自从我上次用C#编写内容以来它已经很久了,但似乎你使用ASCII来解码字符串,是不是更适合使用其他编码?