Все акцентированные символы превращаются в знаки вопроса

У меня есть файл с акцентом Charaters: ÇÍââÇÍ

Мне нужно изменить их в кодировку ISO-8859-15

Код:

    String fileName = "C:/Users/User/AppData/Local/Temp/temp6893820181068878551.txt";

    File file = new File(fileName);
    FileInputStream fin = new FileInputStream(file);

    FileChannel ch = fin.getChannel();
    int size = (int) ch.size();
    MappedByteBuffer buf = ch.map(FileChannel.MapMode.READ_ONLY, 0, size);

     byte[] utf8bytes = new byte[size];
    buf.get(utf8bytes);

    System.out.println(new String(utf8bytes));  

    System.out.println();
    System.out.println();

        Charset utf8charset = Charset.forName("UTF-8");
        Charset iso88591charset = Charset.forName("ISO-8859-15");

        String string = new String ( utf8bytes, utf8charset );
        System.out.println(string);
        System.out.println();
        System.out.println();

        byte[] iso88591bytes = string.getBytes(iso88591charset);

        for ( byte b : iso88591bytes )
            System.out.printf("%02x ", b);

        System.out.println();
        System.out.println();

        String string2 = new String ( iso88591bytes, iso88591charset );

        System.out.println(string2);

Но я получаю в качестве вывода:

ÇÍââÇÍ


??????


3f 3f 3f 3f 3f 3f 

??????

2 ответа

Решение

Я нашел решение!

Проблема была в самом файле.

При записи в исходный файл он должен быть в кодировке UTF-8.

Попробуйте нормализовать строку перед вызовом.getBytes(), то есть вызвать Normalizer.normalize(string, Normalizer.Form.NFC)

Одни и те же акцентированные символы могут быть представлены в разных двоичных формах Юникода. Возможно, только форма NFC может быть преобразована в ISO-8859-15?

Другие вопросы по тегам