我正在使用Java SE中的客户端 - 服务器网络应用程序。我使用从客户端到服务器的换行符终止的stings,服务器以空终止字符串响应 在Netbeans IDE的输出窗口中,我发现在我发送和接收的字符串中有一些乱码。
当我在Notepad ++中粘贴包含该字符的所有字符并且包括该字符消失时,我无法弄清楚这些字符看起来像是一个矩形框。
我怎么知道IDE的输出屏幕中出现了哪些字符?
答案 0 :(得分:2)
如果您从服务器返回的响应应该是人类可读的文本,那么这可能是字符编码问题。例如,如果客户端和服务器都是用Java编写的,则很可能他们使用/假设文本使用不同的字符编码。 (也可能是响应不应该是人类可读的文本。在这种情况下,客户端不应该试图将其解释为文本......所以这个问题没有实际意义。)
当程序试图呈现一些它不理解的字符代码时,通常会看到框(splats)。这可能是真实的字符(例如日文字符,数学符号等),也可能是由用于编码和解码文本的字符集之间的不匹配引起的伪影。
要尝试弄清楚发生了什么,请尝试修改客户端代码以将响应读取为字节而不是字符,然后以十六进制的形式将字节输出到控制台。然后在您的问题中发布这些字节,以及您当前看到的显示字符。
如果您了解字符集命名并了解字符集可能是什么,那么UNIX / Linux iconv
实用程序可能会有所帮助。 Emacs广泛支持在各种字符编码中显示/编辑文件。 (即使是普通的旧写字板也可以提供帮助,如果这只是行终止序列的问题;例如“\ n”与“\ r \ n”对比“\ n \ r”。)
(我不会试图通过复制和粘贴来诊断这一点。复制和粘贴过程本身可能会“破坏”数据,导致您进一步混淆。)
答案 1 :(得分:0)
这可能只是二进制数据。当解释为ascii时,大多数都会看起来像胡言乱语。确保你正在向套接字写入确切的字节数,而不是像4096这样的好数字。如果你能发布你的代码,那么我们可以帮助你找到错误。