我需要一些帮助将 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;
}
}
然而,对于如此简单的转换来说,这似乎需要大量工作。有更好的办法吗?
此外,我可能需要对从字节数组转换为字符串的数据执行相同的操作。这种情况下有没有更简单的解决方案?
最佳答案
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 编码的较低范围相匹配。
关于java - 将字节数组转换为转义字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7487917/