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

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

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

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

04.08.2014, 22:45. Просмотров 907. Ответов 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2014, 22:45     Чтение русских символов. Отрицательные значения у символов
Посмотрите здесь:
XMLPullParser чтение русских символов Android
Сортировка символов Android
Получение символов из слова Android
Автоматическая замена символов Android
Запрет ввода символов Android
Удалить первые 10 символов Android
Создание спец. символов Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
EVP
321 / 243 / 43
Регистрация: 14.12.2010
Сообщений: 464
04.08.2014, 22:50     Чтение русских символов. Отрицательные значения у символов #2
Указать кодировку.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 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
321 / 243 / 43
Регистрация: 14.12.2010
Сообщений: 464
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     Чтение русских символов. Отрицательные значения у символов
Еще ссылки по теме:
Android Отображение специальных символов
String добавление n одинаковых символов Android
Android Java 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     Чтение русских символов. Отрицательные значения у символов
Ответ Создать тему
Опции темы

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