у меня есть интерфейс а в нем метод
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();
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости