java - 如何破译网络程序中的乱码/乱码

标签 java networking debugging

我正在 Java SE 中开发客户端-服务器网络应用程序。我正在使用从客户端到服务器的由换行符终止的字符串,并且服务器以空终止字符串进行响应。
在 Netbeans IDE 的输出窗口中,我在发送和接收的字符串中发现了一些乱码。

我无法弄清楚这些字符是什么,它们大多看起来像一个矩形框,当我将包含该字符的行粘贴到 Notepad++ 中时,所有跟随并包括该字符的字符都会消失。

我如何知道 IDE 的输出屏幕中出现了哪些字符?

最佳答案

如果您从服务器返回的响应应该是人类可读的文本,那么这可能是字符编码问题。例如,如果客户端和服务器都是用 Java 编写的,则它们很可能使用/假设不同的文本字符编码。 (响应也可能不应该是人类可读的文本。在这种情况下,客户端不应该尝试将其解释为文本......所以这个问题没有实际意义。)

当程序尝试呈现某些它不理解的字符代码时,您通常会看到方框(splats)。这可能是一个真实的字符(例如日语字符、数学符号等),也可能是由于用于对文本进行编码和解码的字符集之间不匹配而导致的伪影。

要尝试弄清楚发生了什么,请尝试修改客户端代码以将响应读取为字节而不是字符,然后将字节以十六进制输出到控制台。然后将这些字节以及您当前看到的显示字符一起发布到您的问题中。

如果您了解字符集命名并了解字符集可能是什么,UNIX/Linux iconv 实用程序可能会有所帮助。 Emacs 广泛支持以多种字符编码显示/编辑文件。 (如果这只是行终止序列的问题,即使是普通的旧写字板也能有所帮助;例如“\n”与“\r\n”与“\n\r”。)

(我会避免尝试通过复制和粘贴来诊断此问题。复制和粘贴过程本身可能会“破坏”数据,导致您进一步困惑。)

关于java - 如何破译网络程序中的乱码/乱码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2046558/

相关文章:

c++ - 在 Visual Studio 中配置 "Application Verifier"

java - 在 Windows 中处理 unix 路径

java - 如何摆脱这个 while 循环

python - 使用 Python sshtunnel 进行端口转发休息请求

debugging - 无法使用eclipse调试tomcat服务器

ios - 为什么 iPhone 5.1 Simulator 提供的调试信息少于 4.3 Simulator?

JavaFX方法引用事件处理

java正则表达式去除重复单词

networking - IRC中的最短路径是如何保证的?

linux - iwlib 尝试获取访问点名称 - u.addr.sa_data 包含可疑字符,导致 QString 为空