我制作了一个Java套接字侦听器,它侦听端口80。基本上,它所做的是收集在端口80侦听的数据,并将其存储在临时字符串中,然后用于进一步的操作(类型转换等)。现在的基本问题是,端口80上的数据具有不可读的部分(例如@ [Qô— z‡)。现在,我将其存储在字符串中,当我打印字符串时,它仅打印可理解的可读部分,但令我困惑的是,当我打印字符串的长度时,它仅打印可读部分的长度。所以我想知道我将不可读的字符串部分存储在字符串中的方法是否可以对其进行进一步的操作。如果没有,我还希望获得一些有关如何存储此类传入数据的指示。

问候
1

最佳答案

这里没有任何意义。如果要在字符串中存储数据的“不可读”部分,它将在字符串的长度中反映出来。


  我想知道我将不可读的字符串部分存储在字符串中的方法是否可以对其进行进一步的操作。如果没有,我还希望获得一些有关如何存储此类传入数据的指示。


这取决于为什么数据不可读。


一种可能性是远程系统正在以某种意外的字符集或编码发送数据。例如,如果它正在发送Latin-1,并且您期望使用UTF-8(反之亦然),则文本的某些部分可能不可读。解决方案是找出远程系统要发送的字符集和编码,并在转换为Java字符时使用正确的Java字符集名称。
另一种可能性是某些数据是二进制数据。如果是这样,则应根据远程系统使用的应用程序协议,将文本与二进制数据分开。
最后,不可读的东西可能是由线路噪声或类似原因引起的。如果是这种情况,您应该保持原样。


另一种方法是使用字节数组(或类似的东西)而不是字符串来保存数据。当您不确定字符集和编码时,尝试将字节转换为字符的问题是转换可能是有损的。通过存储原始字节,您的应用程序至少可以在以后找到正确的... ...当您确定正确的转换是什么时。

10-07 13:17
查看更多