![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| x_bot |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 15.2.2007 Репутация: нет Всего: нет |
Всем привет!
У меня следующая продлема. Имеется двоичный файл, состоящий из полей, каждое поле закодированно своей кодировкой. Основная ANSI, но есть и другие: cp1251, koi-8, ascii... Необходимо прочитать этот файл и вывести его на консоль и в awt-компонент, например TextArea. Пытался добыть закодированный текст из считанного массива байтов следующим методом:
Но, увы при выводе кодировки появляются квадраты... Пораметр -Dfile.encoding=ANSI-1251 не помогает. Как поступить? И вопрос в догонку, как оптимизировать считывание, то есть сделать его более рациональным( уменьшить код, повысить скорость обработки)? Ведь все поля имеют различное смещение, различное содержание, различный формат. Заранее спасибо. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Почему ты пишешь ANSI-1251? Такой кодировки нет, есть windows-1251.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| x_bot |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 15.2.2007 Репутация: нет Всего: нет |
Почему же нет? Есть! c.isSupported("ANSI-1251"); возвращается true. с - объект типа Charset. А ещё есть ANSI_X3.4-1986, на этом список кодировок ansi заканчивается...
Добавлено @ 05:29 Нехитрый код всё покажет все кодировки:
|
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Ну раз он распознает такой алиас, то приведенный код должен работать.
Выложи пример демонстрирующий ошибку и файл с данными. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| x_bot |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 15.2.2007 Репутация: нет Всего: нет |
Прошу прощения, но файл дать не могу. А код следующего вида:
Экспериметы с кодировками не спасают. |
|||
|
||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Я создал файл из одной строки в кодировке windows-1251, и у меня все нормально считалось.
Попробуй такой код:
Что он выдаст для файла состоящего из АБВ, по идее должен:
Куда выводишь? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
| x_bot |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 15.2.2007 Репутация: нет Всего: нет |
Вывожу на консоль, и в TextArea. Просмотрев файл в двоичном редакторе, обнаружил, что многие байты вообще равны 0x00, соответственно \u0000, а это NULL. За него выводит квадрат.
|
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Проблема решена? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| x_bot |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 15.2.2007 Репутация: нет Всего: нет |
Да, проблему я решил. Теперь есть другая проблема. Двоичный файл, с которого всё читается, содержит поля заданного типа. Например, есть 4-х байтные числа с плавающей точкой(float).
F3 F2 C8 45 - при чтении побайтно соблюдается последовательность F3 F2 C8 45. Значения получаются весьма загадочные. Эмпирическим методом вывел, что если читать наоборот значения получаются какие нужно. Пообщался с людьми, такие проблемы существуют и в других языках, кроме C++. Как поступить то? Можно по-деревенски:
Однако опять загвоздка... Метод readFloat() возвращает значения, отличные от значений, которые хранились бы в переменных типа float с теми же байтами. Порядок проверял. Одинаковый. Фантастика какая-то... Или что-то не так. И опять же, как повысить скорость всего этого вычислительного процесса? |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Java записывает/читает согласно IEEE 754 floating-point "single format" bit layout, вопрос в том в каком формате пишет источник. Т.е. с помощью Float.floatToIntBits() можно получить int, а вот дальше вопрос как его записать в файл (аналогично чтение).
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| x_bot |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 15.2.2007 Репутация: нет Всего: нет |
Да, так и есть.
Float.intBitsToFloat(reverse(b)); - для случая, если метод reverse() возвращает int. Переписал метод, теперь всё верно. Спасибо. А запись меня пока не интересует.... Добавлено @ 01:43 Вопрос решён. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |