Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中将ByteArray转换为字符串时出现的奇怪字符_Java - Fatal编程技术网

在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
。在将字符串加载到数组中之前,请尝试清除该数组。。。