Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Flash_2oo9
3 / 3 / 0
Регистрация: 31.10.2012
Сообщений: 142
#1

Чтение русских символов. Отрицательные значения у символов - Android

04.08.2014, 22:45. Просмотров 886. Ответов 6
Метки нет (Все метки)

Добрый вечер. Считую файл .txt. Но русские буквы получают отрицательное значение. И в итоге при попытке перевести в String не распознаются. Например, "с" = 15. Подскажите как исправить?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 private void readFile(File file, String newDictionaryName) {
        int length = (int) file.length();
        byte[] bytes = new byte[length];
 
        try {
            FileInputStream in = new FileInputStream(file);
            try {
                in.read(bytes);
            } catch (IOException e) {
                Toast.makeText(getApplicationContext(), "Ошибка чтения", Toast.LENGTH_LONG).show();
            } finally {
                in.close();
            }
        } catch (IOException e) {
            Toast.makeText(getApplicationContext(), "Файл отсутствует", Toast.LENGTH_LONG).show();
        }
        String contents = new String(bytes);
        if (contents.length() > 0) {
            writeToDictionary(contents, newDictionaryName);
        } else {
            Toast.makeText(getApplicationContext(), "Файл пустой", Toast.LENGTH_LONG).show();
        }
    }
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
EVP
320 / 242 / 43
Регистрация: 14.12.2010
Сообщений: 462
04.08.2014, 22:50     Чтение русских символов. Отрицательные значения у символов #2
Указать кодировку.
Spelcrawler
525 / 495 / 111
Регистрация: 12.03.2014
Сообщений: 1,647
Завершенные тесты: 1
04.08.2014, 22:53     Чтение русских символов. Отрицательные значения у символов #3
Вот рабочий код, символы все отлично отображаются.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private static String readFile(Context context, String fileName){
 
        try {
            String s = "";
            String path = context.getFilesDir().getAbsolutePath();
            File file = new File (path + "/" + fileName);
            Scanner in = null;
            in = new Scanner(file);
            while(in.hasNext())
                s += in.nextLine();
            in.close();
            return s;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }
Flash_2oo9
3 / 3 / 0
Регистрация: 31.10.2012
Сообщений: 142
04.08.2014, 23:26  [ТС]     Чтение русских символов. Отрицательные значения у символов #4
исправил. добавив цикл.
Java
1
2
3
4
5
6
7
8
9
10
11
   char[] rusEngText = new char[bytes.length];
 
        for(int i = 0; i<bytes.length; i++) {
            if(bytes[i]<0) {
                rusEngText[i] = (char) (bytes[i]+1104);
            } else {
                rusEngText[i] = (char) (bytes[i]);
            }
        }
 
        String contents = new String(rusEngText);
Проблема была в том что русские буквы в формате юникод слегка не влезают в byte.
Не понятно зачем правда было делать чтобы FileInputStream.read() мог принимать только byte[], если ясно что туда не влезут все символы.
EVP
320 / 242 / 43
Регистрация: 14.12.2010
Сообщений: 462
04.08.2014, 23:43     Чтение русских символов. Отрицательные значения у символов #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Flash_2oo9 Посмотреть сообщение
исправил. добавив цикл.
Не делай больше так...

Цитата Сообщение от Flash_2oo9 Посмотреть сообщение
Не понятно зачем правда было делать чтобы FileInputStream.read() мог принимать только byte[], если ясно что туда не влезут все символы.

Файлы только тестовые бывают?
Текстовые файлы в каких кодировках бывают?
Как узнать кодировку файла без его прочтения? (Возможно, у кого-то телепатический модуль есть для Java на этот случай? )
Как читать текстовый файл с неизвестной кодировкой?

How to create a Java String from the contents of a file?
Flash_2oo9
3 / 3 / 0
Регистрация: 31.10.2012
Сообщений: 142
05.08.2014, 08:38  [ТС]     Чтение русских символов. Отрицательные значения у символов #6
спасибо, кодировка cp1251 сработала )
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2014, 09:55     Чтение русских символов. Отрицательные значения у символов
Еще ссылки по теме:

Удалить первые 10 символов Android
Сортировка символов Android
TextView цвет фона отдельных символов Android
Кодировка символов (код символа) Android
Автоматическая замена символов Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
05.08.2014, 09:55     Чтение русских символов. Отрицательные значения у символов #7
Вот еще, на днях тоже испытывал проблемы
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
StringBuffer sb = new StringBuffer();
BufferedReader br = null;
try {
    br = new BufferedReader(new InputStreamReader(mCtx.getAssets() //mCtx это Context
        .open("file.txt"), "Cp1251"));
    String temp;
    while ((temp = br.readLine()) != null){
        sb.append(temp);
    }
} catch (IOException e) {
        e.printStackTrace();
} finally {
    try {br.close(); 
    } catch (IOException e) {e.printStackTrace();}
}
Yandex
Объявления
05.08.2014, 09:55     Чтение русских символов. Отрицательные значения у символов
Ответ Создать тему
Опции темы

Текущее время: 06:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru