dis.readchar Китайские буквы - неправильно истолкованные символы! - PullRequest
1 голос
/ 02 декабря 2010

Я хочу прочитать файл в ArrayList символов. Сначала я подумал, что это может быть довольно изящный способ сделать это:

ArrayList<Character> char_chain = new ArrayList<Character>();


try {
            fis = new FileInputStream(file);
            bis = new BufferedInputStream(fis);
            dis = new DataInputStream(bis);

            while (dis.available() != 0) {
                // UTF8 unnoetig, da 26 Lettern
                while (!EOF) {
                    try {
                        char_chain.add(dis.readChar());
                    } catch (EOFException e) {
                        EOF = true;
                    }
                }
            }
        if (debug) {
            while (char_chain.get(i) instanceof Character) {
                System.out.println(char_chain.get(i++));
            }
        }

Если я сделаю это, я получу китайские буквы:

噖
䝃
塘
䕅

Может кто-нибудь сказать мне, почему это так? :) Следует отметить, что текст содержит обычные заглавные буквы, такие как: ABCDE и т. Д.

1 Ответ

1 голос
/ 02 декабря 2010

DataInputStream.readChar() предполагает, что вы читаете символы UTF-16.

Для чтения символьных данных используйте InputStreamReader с правильной кодировкой («US-ASCII» должно быть достаточно, если файл содержит толькоосновные латинские буквы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...