Java无法读取的字符串

时间:2010-01-20 04:19:53

标签: java string

我创建了一个侦听端口80的java套接字侦听器。基本上它的作用是收集它在端口80上侦听的数据并将其存储在一个临时字符串中,然后用于进一步操作(类型转换等)所有)。现在基本的问题是端口80上的数据具有不可读的部分(如@ [Qô - z‡)。现在,我将它存储在一个字符串中,当我打印字符串时,它只打印可读的部分,这是可以理解的,但令我困惑的是,当我打印字符串的长度时,它只打印可读部分的长度。所以我想知道我是否可以在字符串中存储不可读的字符串部分,以便对它们进行进一步的操作。如果没有,我还想了解如何存储这些传入数据。

此致 p1nG

2 个答案:

答案 0 :(得分:1)

您可以将数据存储在java.nio.ByteBuffer中以避免所有字符串的混乱...

如果它是真正的文本以某种宽字符编码发送,您将需要使用适当的字符集将字节缓冲区转换为字符串,方便java.nio.charset.Charset.decode

答案 1 :(得分:1)

这里的东西没有意义。如果要在String中存储数据的“不可读”部分,反映在字符串的长度中。

  

我想知道我在字符串中存储不可读字符串部分的方法是否可以接受,以便对它们进行进一步操作。如果没有,我还想了解如何存储这些传入数据。

这取决于数据无法读取的原因。

  • 一种可能性是远程系统正在以某种意外的字符集或编码方式发送数据。例如,如果它正在发送Latin-1并且您期望UTF-8(反之亦然),则文本的某些部分可能是不可读的。解决方案是确定远程系统发送的字符集和编码,并在转换为Java字符时使用正确的Java字符集名称。

  • 另一种可能性是某些数据是二进制数据。如果是这样,您应该根据远程系统使用的应用程序协议将文本与二进制数据分开。

  • 最后,不可读的东西可能是由线路噪音等引起的。如果是这种情况,您应该保持原样。

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