14 фев 2007 23:08 | |
Сообщения:17
|
Получив поток из файла, форматирую файл побайтно. Но, прочитав файл обнаруживается абра-кадабра. Кодировка ASCII, но не русских букв, ни нормальных цифр нет. Преобразования класса Charset не канают. В чём загвоздка?
|
15 фев 2007 21:57 | |
Сообщения:17
|
Проверял вывод в консоли и на разные компоненты awt. Что не удивительно, опять проблемы. Русские символы квадратами...
с - экземпляр скасса Charset. А c.defaultCharset() возвращает windows-1251. Как я все понимаю нужно ascii... Код выглядит следующим образом. try { is = new FileInputStream(f); bis = new BufferedInputStream(is); byte reader[] = new byte[bis.available()]; count = bis.read(reader); str = new String(reader, 0, count, "US-ASCII"); // тут ли проблема??? System.out.print(str); bis.close(); is.close(); } catch (Exception e) { e.printStackTrace(); } return str + " - " + count + c.defaultCharset(); Что же делать? |
16 фев 2007 00:54 | |
Сообщения:3874
|
c.defaultCharset(), помоему, возвращает кодировку которая указана в системном параметре file.encoding (который в Windows - cp1251). Вы все правильно делаете, нужно указать кодировку при создании экземпляра строки из массива байт.
Указать кодировку можно, также, и при чтении файла. Примеры : http://javatalks.ru/sutra3397.php#3397 http://javatalks.ru/ftopic905.php |
16 фев 2007 02:12 | |
Сообщения:17
|
Ок, спасибо. Так и есть.
Возникает другой вопрос, а если файл в кодировке, которая не поддерживается ява-машиной. Например ANSI... |
16 фев 2007 02:47 | |
Сообщения:17
|
Простите, ошибка вышла, такая кодировка есть. Просто файл, который у меня есть, имеет поля разными кодировками, есть asciiz, символьные данные в ansi(windows) или в koi-8, а так же есть поля в юникоде. Как бы так ухитриться и грамотно все считать?
|
16 фев 2007 12:29 | |
Сообщения:3874
|
Ну если у вы знаете где начаинается и где заканчивается текст в разной кодировке, можно читать эти блоки отдельно побайтово, а потом приводить к нужной кодировке каждый кусок.
|
16 фев 2007 17:07 | |
Сообщения:17
|
Знаю, так и поступлю... Благо описание формата есть... Только кода будет очень много. Может есть способ как-нибудь применить более рацональный подход? Как-то нужно всё это оптимизировать, например ускорить процесс считавания файла...
|
16 фев 2007 17:19 | |
Сообщения:3874
|
Честно говоря, я даже не знаю что и подсказать, единственный параметр которой вы можете оптимизировать - это количество повторений при считывании, если он у вас будет единица (т.е. вы всего один раз прочитаете последовательно файл) тогда скорость работы будет максимальной. Конечно, все зависит и от сложности формата, но тут я вам подсказать уже не могу ...
|