【发布时间】:2019-09-11 18:40:20
【问题描述】:
我需要一些帮助,将 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;
}
}
但是,对于如此简单的转换来说,这似乎是一项非常艰巨的工作。有没有更好的办法?
另外,我可能需要对已从字节数组转换为字符串的数据执行相同的操作。在这种情况下有更简单的解决方案吗?
【问题讨论】:
-
这正是 base64 的设计目的。对于字符串,使用
getBytes(Charset)方法(你必须决定你希望输出的字符集编码)。 -
0x20 >= codePoint && codePoint >= 0x7e始终为假。我想你的意思是<=。 -
@Jim:是的,这是一个错字。固定。
-
不,Base64 不是我在这里需要的。我不需要任何类型的完整 8 位编码,而是人类可读的编码。原因是,我想记录字符串,它的前面可能还包含一些额外的标题,我想尽可能简单地打印出来。实际上,仅对标头进行解码并以解码的方式打印它可能会更简单。