Русские символы для FileInputStream

197
07 августа 2018, 02:40

у меня есть интерфейс а в нем метод

void setSource (FileInputStream fis) throws IOException;

я реализовал этот метод:

@Override
public void setSource(FileInputStream fis) throws IOException {
    StringBuffer stringBuffer = new StringBuffer();
    int i = -1;
    while ((i = fis.read()) != -1) {
        stringBuffer.append((char)i);
    }
    this.text = stringBuffer.toString();
}

И эта реализация работает только с латинскими символами, а кириллица отображается криво. Как это исправить?

Answer 1

Необходимо указать кодировку файла

@Override
public void setSource(FileInputStream fis) throws IOException {
    StringBuilder stringBuilder = new StringBuilder();
    try (InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8)) {
        int i = -1;
        while ((i = fis.read()) != -1) {
            stringBuilder.append((char)i);
        }
    }
    this.text = stringBuilder.toString();
}

И не используйте StringBuffer, он медленный и устаревший.

Answer 2

Спасибо за помощь, но вот что я придумал:

@Override
    public void setSource(FileInputStream fis) throws IOException {
        StringBuilder stringBuffer = new StringBuilder();
        BufferedReader in = new BufferedReader(new InputStreamReader(fis, "UTF8"));
        String str;
        while ((str = in.readLine()) != null) {
            stringBuffer.append(str);
        }
        this.text = stringBuffer.toString();
        in.close();
    }
Answer 3

Попробуйте указать кодировку.

@Override
public void setSource(FileInputStream fis) throws IOException {
    UnicodeReader ur = new UnicodeReader(fis, "CP1251");
    BufferedReader br = new BufferedReader(ur);
    final StringBuilder sb = new StringBuilder();
    String line;
    while ((line = br.readLine()) != null)
        sb.append(line);
    this.text = sb.toString();
}
READ ALSO
Замена специальных символом на числа по порядку

Замена специальных символом на числа по порядку

Необходим кусочек кода, который позволит заменять специальные символы на числа, которые будут идти по порядку

178
Android Fragment, передача ссылки в браузер

Android Fragment, передача ссылки в браузер

Имеется ссылка, которую необходимо открыть в браузереКак это можно сделать? У Activity - intentом, а у фрагментов как?

165
Получение ссылки на объект Class класса String [закрыт]

Получение ссылки на объект Class класса String [закрыт]

Есть следующее тестовое задание:

195
Как взять массив из строкового ресурса и поместить в массив String

Как взять массив из строкового ресурса и поместить в массив String

Как взять массив из строкового ресурса и поместить в массив String? В Android проекте есть массив строк:

224