我正在对在读取我发送的 XML 时遇到问题的商业应用程序进行故障排除。
我的应用程序是 Java,商业应用程序是在 Windows 上用 C# .NET 4.0 编写的。 C# 应用程序正在监听原始 XML 的简单 TCP 套接字。我从字符串 (XML) 在线路上以字节形式发送数据。 Java 和 C# 代码都在同一台主机上运行。数据通过本地主机发送。
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);
}
我觉得我们都在这里犯了错误;但它可以在具有相同代码的其他系统上运行,我认为这是巧合。我们只是看到了一种边缘情况。
想法?
最佳答案
不要使用 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 来解码字符串,使用其他编码不是更合适吗?
关于java - 通过原始套接字编码字符串 - 额外字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24524060/