有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将八位字节字符串转换为可读字符串

Possible Duplicate:
Convert a string representation of a hex dump to a byte array using Java?

例如,我得到一个八进制字符串,如下所示: 3C3F786D6C2076657273696F6E3D22312E3302220656E636F64696E673D225554462D38223F3E3C53 6f6170456e763a456e76656c6f706520786d6c6e733a536f6170456e763d22687474703a2f2f7363 68656d61732e786d6c736f61702e6f72672f736f61702f656e76656c6f70652f223e3c536f617045 6E763A48656164657220786D6C6E733A7773613D22687474703A2F2F777772E77332E6F726722F32 3030352F30382F616472657373696E67223E3C7773613A46726F6D3E3C7773613A4164726573 733E43484E59442473C2F77773613A41647265733E3C2F77773613A46726F6D3E3C7773613A544 6F3E43433C2F77773613A546F3E3C7773613A416374696F6E3E68744703A2F2F6372632E73 6572766963652E62616E6B636F6D6D2E636F6D2F61627374616374696F6E2F61746F6D69632F74 6563686E696316C2E506572736F6E616C4372656469745265706F7274536572762F4661756C743C 2F77773613A416374696F6E3E3C7773613A4D65737361676549443E75726E3A7575759643A30303031

我知道底层的文本是UTF-8编码,那么谁能提供一些方法将这些八位字节转换成可读的字符串呢


共 (3) 个答案

  1. # 1 楼答案

    尝试读取每两个字符,用^{}将它们解析为基数为16的整数,将它们添加到字节数组中,并构造一个^{} from the result

    public static String fromHex(String s) throws UnsupportedEncodingException {
      byte bs[] = new byte[s.length() / 2];
      for (int i=0; i<s.length(); i+=2) {
        bs[i/2] = (byte) Integer.parseInt(s.substring(i, i+2), 16);
      }
      return new String(bs, "UTF8");
    }
    
    fromHex("48656c6c6f2c20576f726c6421"); // => "Hello, World!"
    

    字符串示例看起来像一个包含SOAP消息的XML文档

  2. # 2 楼答案

    我认为首先需要将其转换为字节数组,然后构建字符串,查看byte类,看看它是否有一种从两个十六进制字符中提取字节的方法,然后只需迭代每两个字符并将其转换为字节

    这个链接可能有用Byte parseByte with radix

  3. # 3 楼答案

    来看看snmp4j的OctetString。这对你有帮助

    OctetString octetString = new OctetString(java.lang.String);
    octetString.toString();