将字节数组转换为转义字符串

时间:2011-09-20 15:43:04

标签: java ascii

我需要一些帮助将java字节数组转换为7位ASCII字符串。但是我得到了8位序列,并且需要将任何不可读的字符转义为它的转义序列。有没有一个简单的解决方案或我需要建立自己的?

看到7位ASCII中的可读字符范围现在是连续的,我正在考虑以下内容:

for( int i = 0; i < buffer.length; i++ ) {
   int codePoint = ( (int) buffer[ i ] ) & 255;
   if( 0x20 <= codePoint && codePoint <= 0x7e ) {
      res = res + String( (char) codePoint );
   } else {
     String c = Integer.toHexString( codePoint );
     if( c.length() < 2 ) {
       c = "0" + c;
     }
     res = res + "\\0x" + c;
   }
}

然而,对于这种简单的转换来说,这似乎是一项非常艰巨的工作。还有更好的方法吗?

另外,我可能需要对从字节数组转换为字符串的数据执行相同的操作。在这种情况下是否有更简单的解决方案?

2 个答案:

答案 0 :(得分:1)

  public static String escape(byte[] data) {
    StringBuilder cbuf = new StringBuilder();
    for (byte b : data) {
      if (b >= 0x20 && b <= 0x7e) {
        cbuf.append((char) b);
      } else {
        cbuf.append(String.format("\\0x%02x", b & 0xFF));
      }
    }
    return cbuf.toString();
  }

您可以使用format方法削减措辞。

请注意,此方法仅是安全的,因为ASCII范围与Java字符串使用的UTF-16编码的较低范围匹配。

答案 1 :(得分:-2)

如果它不适合base64,则第二个标准为java.net.URLEncoder