在Java中将ByteArray转换为字符串时出现的奇怪字符
我有以下字节数组在Java中将ByteArray转换为字符串时出现的奇怪字符,java,Java,我有以下字节数组专用字节[]文件=新字节[40] 它接受最多20个字符的字符串。如果较短,则数组的其余部分用零填充: [116, 111, 117, 99, 104, 50, 46, 116, 120, 116, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 这个字节序列使用Java的套接字传输,并转换回一个字符串用作文件路径 但是,在截断零并使用stringf
专用字节[]文件=新字节[40]
它接受最多20个字符的字符串。如果较短,则数组的其余部分用零填充:
[116, 111, 117, 99, 104, 50, 46, 116, 120, 116, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
这个字节序列使用Java的套接字传输,并转换回一个字符串用作文件路径
但是,在截断零并使用stringfilepath=newstring(path)之后代码>在字符串后面生成一个奇怪的字符:
Appending to this file.. touch2.txt╚
截断方法:
private byte[] trim(byte[] bytes){
int i = bytes.length - 1;
while (i >= 0 && bytes[i] == 0)
{
--i;
}
return Arrays.copyOf(bytes, i + 1);
}
我如何摆脱这个角色?奇怪的是,打印原始字节数组和被截断的字节数组会得到相同的字符序列。在截断所有0字节后,序列末尾仍然有字节3,很可能显示如下:╚. 可能文本字节的结尾(即3)不应该出现在序列中,或者truncate方法也应该截断该字符。该字符不是显示断点字符的系统转义吗?试着在末尾添加一个字符串,看看它是否移动。你试过调试它吗?为什么你会期望一些不同的东西?字节3
通过单字节编码转换为该字符。尽管我不完全确定您使用的是什么编码。对于UTF-8,此(╚代码>)字符转换为9562
。但总体思路是:在编码中,3
就是这个字符。因此,您的问题不是修剪错误,而是在其中有一个您似乎不想拥有的3
。在将字符串加载到数组中之前,请尝试清除该数组。。。