Top.Mail.Ru
Ответы

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

В общем, если давать данному ниже коду русские слова то в файле получается какая-то каша. Английские пишутся нормально. Очень странно, прошу посмотреть. Заранее спасибо :)
Вот код, путь на свой меняйте:
import java.util.*;
import java.io.*;

public class Main
{
public static void main(String[] args) throws IOException
{
File file = new File("/sdcard/tst.txt");
if(!file.exists()){
file.createNewFile();
}
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(file);
String input = new Scanner(System.in).nextLine();
char[] inputc = input.toCharArray();
byte[] towrite = new byte[inputc.length];
for(int i = 0;i<inputc.length;i++){
towrite[i] = (byte) inputc[i];
}
fos.write(towrite);
byte[] readed = new byte[fis.available()];
fis.read(readed);
char[] readedc = new char[readed.length];
for(int i = 0;i<readedc.length;i++){
readedc[i] =(char) readed[i];
}
System.out.println(Arrays.toString(readed));
System.out.println(Arrays.toString(readedc));
System.out.println(new String(readedc));
}
}

По дате
По рейтингу
Аватар пользователя
Новичок
8лет

Ну вы и замудрили. Зачем так усложнять? Зачем нужны байты? Да и вряд ли там нужен Scanner. Используйте BufferedReader, FileReader, FileWriter, а не сомнительные массивы с байтами... Зачем для одного файла сразу открывать два потока на чтение и запись?

Аватар пользователя
Мыслитель
8лет

потому что char является 16-битным символом Unicode.
при конвертировании из char в byte теряется часть данных.
не понятно зачем вообще конвертировать ?

Источник: <a rel="nofollow" href="http://cybern.ru/java-char.html" target="_blank">http://cybern.ru/java-char.html</a>
Аватар пользователя
Знаток
8лет

Ну незн

И да это оч странно...

Аватар пользователя
Мастер
8лет

дело в кодировке
1)укажи кодировку в самом файле
2)кодировку файла в своём текст редакторе
P.S. везде кодировку на utf-8

Аватар пользователя
Гуру
8лет

Необходимо сообщить странице сайта информацию о кодировке. Делается это метатегом meta charset=utf-8, как сам замечал, бывает следует использовать и windows-1251-кодировку; смотря куда именно записываете и куда выводите. Вообще - почитайте про кодировки и просто поэксперементируйте с разными, - у меня самого разные файлы по-разному реагировали, особенно, если обработка данных производится совсем на чужих сайтах (например, неоднократно сталкивался с проблемой кодировке при нажатии кнопок "Поделиться" для разных соцсетей - у каждой из них своя реакция на один и тот же код, хоть и прописан, казалось бы, универсальнее некуда, чтобы всем подходить - ан, нет: одни нормально считывали один и тот же текстовый файл, а другие выдавали "кракозяблу" - и никакой логике не подчинялось использование UTF-8 или Windows-1251).
Получилось только методом многочисленных проб и ошибок.
Так что в любом случае - попробуйте разные кодировки применять. Но рекомендуемая (она одна из самых первых, а посему из-за своей простоты воспринимается бОльшим кол-вом систем) для подобных процедур остается UTF-8.