CharsetDecoder не работает на машине Linux - PullRequest
2 голосов
/ 18 ноября 2011

Следующее не работает на Linux-машине.

        Charset charset = Charset.forName("UTF-8");
        CharsetDecoder decoder = charset.newDecoder();

        try {
            FileOutputStream fo = new FileOutputStream("hi.txt");
            PrintStream ps = new PrintStream(fo);
            String msgBody = "ΣYMMETOXH";
            ps.println(decoder.decode(ByteBuffer.wrap(decoder.decode(ByteBuffer.wrap(msgBody.getBytes())).toString().getBytes())));
            ps.close();
            fo.close();
        } catch (CharacterCodingException e) {
            e.printStackTrace();
        }

Этот код работает на Windows.В чем может быть проблема?На машине linux декодер не декодирует строку.

1 Ответ

3 голосов
/ 18 ноября 2011

Проблема в том, что вы используете String.getBytes() хотя бы один раз, возможно, дважды (вашу чрезвычайно длинную строку трудно прочитать; использование нескольких операторов облегчит понимание). Это не указывает кодировку, поэтому будет использоваться кодировка платформы по умолчанию. В этот момент у вас есть зависимость от платформы ... отсюда и проблема.

Не совсем понятно, чего вы пытаетесь достичь, но если вы ищете причины для поведения платформы, это первое, на что нужно обратить внимание.

Да, и создание PrintStream подобного будет иметь ту же проблему ... вместо этого создайте OutputStreamWriter с определенной кодировкой.

...