【问题标题】:Java: Bits -> Bytes -> String EncodingJava:位 -> 字节 -> 字符串编码
【发布时间】:2016-05-12 18:26:57
【问题描述】:

在 Java 中,我有一个位字符串,例如“01100111000111……”。接下来,我想做以下事情:

  1. 将字符串转换为字节数组,我已成功使用: byte[] bytes = new BigInteger(bits, 2).toByteArray();
  2. 接下来,我想将字节转换为我尝试使用的字符串: String byteString = new String(bytes, "UTF-8"); 但结果不正确(垃圾字符等)。

我认为“UTF-8”不是正确的编码。

请告知是否有任何其他方法可以从此类字节或正确的编码中获取字符串。

【问题讨论】:

  • 我认为“US-ASCII”会起作用。
  • 这样您就可以为您的问题提供自己的答案:-)
  • 嗯,不。只是想,但它没有工作。所以是的,仍然需要回答。
  • 如果你没有编码,你能做的最好的就是尝试它们并检查结果,直到你弄清楚什么是正确的
  • 需要注意的一点是:如果初始字符串以 1 开头并且长度是 8 个字符的偶数倍,那么调用 BigInteger(bits, 2).toByteArray() 将以 0 结尾byte数组,可能会混淆String的后续构造。

标签: java encoding byte utf


【解决方案1】:

在您发表评论后编辑:

String string = "01100111000111";
byte[] bytes = new BigInteger(string, 2).toByteArray();

String out = "";

for(byte b: bytes)
 out+= String.format("%8s", Integer.toBinaryString(b & 0xFF)).replace(' ', '0');

System.out.println(out);

输出:

0001100111000111

希望这能有所帮助。

【讨论】:

  • 我认为这有点像上面的开源建议。但问题是我希望将 1 和 0 的字符串视为二进制而不是每个数字一个字节。然后将 8 位字符串转换为二进制,分配给 byte[],然后在 String 中需要它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
  • 2020-05-22
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多