将单个字节转换为字符串并返回字节

时间:2017-02-20 15:52:37

标签: java

我尝试将单个字节转换为字符串,然后再次返回原始字节。但是,下面的断言失败了。任何建议都将深表赞赏

import org.junit.Test;
import java.io.UnsupportedEncodingException;
import static org.junit.Assert.assertEquals;

    public class ByteTest {
        private static final String CHARSET = "UTF-8";
        @Test
        public void test() throws UnsupportedEncodingException {
            byte b = (byte)(220);
            String s = new String(new byte[]{b}, CHARSET);
            byte[] parsed = s.getBytes(CHARSET);
            assertEquals(b, parsed[0]); //fails
        }
    }

1 个答案:

答案 0 :(得分:3)

字节220(0xDC)本身是无效的UTF-8。以字节0xA1..0xF5开头的UTF-8字符需要第二个字节。

尝试其他编码,例如ISO-8859-1,它在Java中有效地进行了1对1字节到字符的往返。

public class ByteTest {
    private static final String CHARSET = "ISO-8859-1";

    @Test
    public void test() throws UnsupportedEncodingException {
        byte b = (byte) (220);
        String s = new String(new byte[] { b }, CHARSET);
        byte[] parsed = s.getBytes(CHARSET);
        assertEquals(b, parsed[0]);
    }
}