FileUtils.readFileToString() из Apache Commons IO некорректно работает с кириллицей

Я использую FileUtils.readFileToString для одновременного чтения содержимого текстового файла с JSON. Файл имеет кодировку UTF-8 (без спецификации). Тем не менее, вместо кириллицы я получаю ?????? знаки. Почему?

public String getJSON() throws IOException
{
    File customersFile = new File(this.STORAGE_FILE_PATH);
    return FileUtils.readFileToString(customersFile, StandardCharsets.UTF_8);
}

person Mikhail Batcer    schedule 12.02.2015    source источник
comment
Где ты видишь??? вместо кириллицы? Приставка? IDE? Другой файл?   -  person StephaneM    schedule 12.02.2015
comment
@StephaneM, этот вопрос должен был в основном ответить на его вопрос: D   -  person nafas    schedule 12.02.2015
comment
@StephaneM Я создал небольшую службу REST с использованием Spring Framework. ????s возвращаются в ответ на запрос GET. Но они только вместо кириллических букв.   -  person Mikhail Batcer    schedule 12.02.2015
comment
Вы не отвечаете на мой вопрос. Где вы читаете ответ на ваш запрос GET?   -  person StephaneM    schedule 12.02.2015
comment
@StephaneM В любом месте, где я могу сделать запрос GET: из браузера, из консоли Javascript, из консоли Python.   -  person Mikhail Batcer    schedule 12.02.2015
comment
Это выглядит так: {lastName:??????,phone:77777777777,email:[email protected],address:??????,secondName:???????,firstName:?? ?????,город:??????}   -  person Mikhail Batcer    schedule 12.02.2015
comment
И есть ли в шрифте в браузере глифы для кириллических символов (и установлена ​​кодировка UTF-8)?   -  person Klas Lindbäck    schedule 12.02.2015
comment
@KlasLindbäck Да, это так.   -  person Mikhail Batcer    schedule 12.02.2015
comment
Какова кодировка ответа REST? Вам нужно изучить все места, где строки преобразуются в/из байтов: чтение файла на сервере, отправка данных с сервера на клиент, сохранение данных на клиенте, просмотр данных на клиенте.   -  person Andreas    schedule 05.03.2020


Ответы (2)


FileUtils.readFileToString не работает с StandardCharsets.UTF_8.

Вместо этого попробуйте

FileUtils.readFileToString(customersFile, "UTF-8");

or

FileUtils.readFileToString(customersFile, StandardCharsets.UTF_8.name());

person Guillaume F.    schedule 04.03.2020
comment
Что ж, есть вариант FileUtils.readFileToString, который принимает Charset, так почему бы не StandardCharsets.UTF_8? Давно решил проблему по другому, но в свободное время может еще раз посмотрю. - person Mikhail Batcer; 05.03.2020

Вот как я решил это еще в 2015 году:

public String getJSON() throws IOException
{
//    File customersFile = new File(this.STORAGE_FILE_PATH);
//    return FileUtils.readFileToString(customersFile, StandardCharsets.UTF_8);
    String JSON = "";
    InputStream stream = new FileInputStream(this.STORAGE_FILE_PATH);
    String nextString = "";
    try {
        if (stream != null) {
            InputStreamReader streamReader = new InputStreamReader(stream, "UTF-8");
            BufferedReader reader = new BufferedReader(streamReader);
            while ((nextString = reader.readLine()) != null)
                JSON = new StringBuilder().append(JSON).append(nextString).toString();
        }
    }
    catch(Exception ex)
    {
        System.err.println(ex.getMessage());
    }
    return JSON;
}
person Mikhail Batcer    schedule 05.03.2020