【问题标题】:Java unreadable stringsJava 不可读的字符串
【发布时间】:2010-01-20 04:19:52
【问题描述】:

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

问候 p1ng

【问题讨论】:

    标签: java string


    【解决方案1】:

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

    我想知道我将不可读的字符串部分存储在字符串中的方法是否可以接受以启用对它们的进一步操作。如果没有,我还想要一些关于如何存储这些传入数据的指针。

    这取决于数据不可读的原因。

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-20
        相关资源
        最近更新 更多