将字符保存到文件时出现问题

lev*_*ovd 4 java unicode file char character-encoding

我遇到了unicode字符序列化和反序列化的问题.这是一个示例程序,它将char写入文件,然后尝试读取它.书写和读取字符(chch2)是不同的.有什么建议为什么我得到这种行为?

public class MainClass {
    public static void main(String[] args) {
        try {
            File outfile = new File("test.txt");
            FileOutputStream fos = new FileOutputStream(outfile);
            OutputStreamWriter writer = new OutputStreamWriter(fos, "UTF-16");
            FileInputStream fis = new FileInputStream(outfile);
            InputStreamReader reader = new InputStreamReader(fis, "UTF-16");

            char ch = 56000;
            System.out.println(Integer.toBinaryString(ch));
            writer.write(ch);
            writer.close();

            char ch2 = (char) reader.read();
            System.out.println(Integer.toBinaryString(ch2));
            reader.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

UPD:根据 经验发现,这仅适用于范围55296-57343的数字.

Bal*_*usC 6

字符56000是U + DAC0,它不是有效的unicode字符,它是一个高代理字符.它们将成对使用,以指向16位宽BMP之外的字符.