у меня есть интерфейс а в нем метод
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();
}
И эта реализация работает только с латинскими символами, а кириллица отображается криво. Как это исправить?
Необходимо указать кодировку файла
@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
, он медленный и устаревший.
Спасибо за помощь, но вот что я придумал:
@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();
}
Попробуйте указать кодировку.
@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();
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Необходим кусочек кода, который позволит заменять специальные символы на числа, которые будут идти по порядку
Имеется ссылка, которую необходимо открыть в браузереКак это можно сделать? У Activity - intentом, а у фрагментов как?
Как взять массив из строкового ресурса и поместить в массив String? В Android проекте есть массив строк: