如何将八位字节字符串转换为可读字符串[重复]

Posted

技术标签:

【中文标题】如何将八位字节字符串转换为可读字符串[重复]【英文标题】:How to convert an octet string to readable string [duplicate] 【发布时间】:2012-05-06 19:13:18 【问题描述】:

可能重复:Convert a string representation of a hex dump to a byte array using Java?

例如,我得到一个八位字节字符串,如下所示: 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d38223f3e3c53 6f6170456e763a456e76656c6f706520786d6c6e733a536f6170456e763d22687474703a2f2f7363 68656d61732e786d6c736f61702e6f72672f736f61702f656e76656c6f70652f223e3c536f617045 6e763a48656164657220786d6c6e733a7773613d22687474703a2f2f7777772e77332e6f72672f32 3030352f30382f61646472657373696e67223e3c7773613a46726f6d3e3c7773613a416464726573 733e43484e594442473c2f7773613a416464726573733e3c2f7773613a46726f6d3e3c7773613a54 6f3e434352433c2f7773613a546f3e3c7773613a416374696f6e3e687474703a2f2f636372632e73 6572766963652e62616e6b636f6d6d2e636f6d2f6162737472616374696f6e2f61746f6d69632f74 6563686e6963616c2e506572736f6e616c4372656469745265706f7274536572762f4661756c743c 2f7773613a416374696f6e3e3c7773613a4d65737361676549443e75726e3a757569643a30303031

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

【问题讨论】:

在这里回答:***.com/questions/140131/… 【参考方案1】:

尝试读取每两个字符,用Integer.parseInt(String,int) 将它们解析为基数为16 的整数,将它们添加到字节数组中,然后构造String 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】:

看看这里来自 snmp4j 的OctetString。这可能对您有所帮助。

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

【讨论】:

【参考方案3】:

我认为您需要先将其转换为字节数组,然后再构建字符串,查看 Byte 类,看看它是否有从两个十六进制字符中获取字节的方法,那么这只是一个问题遍历每两个字符并将它们转换为字节。

此链接可能有用Byte parseByte with radix

【讨论】:

以上是关于如何将八位字节字符串转换为可读字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

改进将字符串转换为可读 url

如何将字符串转换为可读流?

如何在 Swift 中将多字符数字格式转换为可读的字符串?

如何将智能合约返回的地址转换为可读字符串?

将八位字节流转换为图像

将 unsigned char* 转换为可读字符串 & 这个函数在做啥