Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / изменение кодировки / 25 сообщений из 30, страница 1 из 2
28.05.2007, 15:24:49
    #34555496
denissh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
подскажите пожалуйста:
как можно поменять кодировку у массива байт:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 byte  a[] = "string".getBytes();
...
...
какието манипуляции над a[]
..
..
здесь нужно поменять кодировку.

как можно поменять кодировку у массива, без перевода его в строку обратно.??
...
Рейтинг: 0 / 0
28.05.2007, 15:27:36
    #34555510
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
авторкак можно поменять кодировку у массива, без перевода его в строку обратно.??
мммм у byte нет кодировки!!!
...
Рейтинг: 0 / 0
28.05.2007, 15:30:05
    #34555519
denissh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
во как....

а как быть, мне текст надо сжать в 7 бит и передать его в соответствующей кодировке (похожая на ASCII)...если использовать строки, то там некоторые символы при сжатии не правильно воспринимаются
...
Рейтинг: 0 / 0
28.05.2007, 15:36:20
    #34555542
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
или неправильно читаете или неправильно пишете, код покажете
...
Рейтинг: 0 / 0
28.05.2007, 16:13:03
    #34555706
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
ТимоНмммм у byte нет кодировки!!!
Это у String нет кодировки. А byte[] это представление строки в какой-либо кодировке.
...
Рейтинг: 0 / 0
28.05.2007, 16:17:04
    #34555722
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
denisshкак можно поменять кодировку у массива, без перевода его в строку обратно.??
InputStreamReader + OutputStreamWriter
...
Рейтинг: 0 / 0
28.05.2007, 16:19:31
    #34555731
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
авторНадо чётко разделять понятия символов и байтов — иначе непонимание и проблемы гарантированны.

Java практически с самого своего рождения использует для кодирования символов стандарт Unicode. Библиотечные функции Java ожидают увидеть в переменных типа char символы, представленные кодами Unicode. В принципе, Вы, конечно, можете запихнуть туда что угодно — цифры есть цифры, процессор всё стерпит, но при любой обработке библиотечные функции будут действовать исходя из предположения что им передали кодировку Unicode. Так что можно спокойно полагать, что у типа char кодировка зафиксирована. Но это внутри JVM. Когда данные читаются извне или передаются наружу, то они могут быть представлены только одним типом - типом byte. Все прочие типы конструируются из байтов в зависимости от используемого формата данных. Вот тут то на сцену и выходят кодировки — в Java это просто формат данных для передачи символов, который используется для формирования данных типа char. Для каждой кодовой страницы в библиотеке имеется по 2 класса перекодировки (ByteToChar и CharToByte). Классы эти лежат в пакете sun.io. Если, при перекодировке из char в byte не было найдено соответствующего символа, он заменяется на символ ?.

отсюда
http://www.jug.ru/servlets/index?page=rus#8bits
...
Рейтинг: 0 / 0
28.05.2007, 16:21:54
    #34555746
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
авторЭто у String нет кодировки. А byte[] это представление строки в какой-либо кодировке.
byte[] - всегда в unicode
...
Рейтинг: 0 / 0
28.05.2007, 17:33:56
    #34555980
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
ТимоНмммм у byte нет кодировки!!!

ТимоН авторЭто у String нет кодировки. А byte[] это представление строки в какой-либо кодировке.
byte[] - всегда в unicode
- ну Вы даете! :) или я нчего не понял :(

массив типа byte[] содержит числа типа byte (они по определению не имеют кодировки, так же как int или long)

Unicode имеет длину кода 2 байта

при конвертации строки в байтовый массив "текст".getBytes() происходит конвертация кодов (в однобайтовую кодировку ISO-8859-1), а если указать кодировку явно: "текст".getBytes("кодировка"), можно получить массив байтов для нужной кодировки
...
Рейтинг: 0 / 0
28.05.2007, 17:41:08
    #34556003
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
автор- ну Вы даете! :) или я нчего не понял :(
я имел ввиду как раз
авторпри конвертации строки в байтовый массив "текст".getBytes() происходит конвертация кодов (в однобайтовую кодировку ISO-8859-1),
...
Рейтинг: 0 / 0
28.05.2007, 18:20:40
    #34556124
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
ТимоН
я имел ввиду как раз
авторпри конвертации строки в байтовый массив "текст".getBytes() происходит конвертация кодов (в однобайтовую кодировку ISO-8859-1),

ISO-8859-1 не Unicode
...
Рейтинг: 0 / 0
28.05.2007, 18:22:01
    #34556128
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
ТимоНbyte[] - всегда в unicode
то есть уже какая-то кодировочка появилась?
...
Рейтинг: 0 / 0
28.05.2007, 18:24:10
    #34556133
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
:)

Т.е.
"строка в любой кодировке".getBytes() - всегда юникод
...
Рейтинг: 0 / 0
28.05.2007, 18:26:40
    #34556137
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
авторISO-8859-1 не Unicode
Почти: В Юникоде первые 256 кодовых позиций совпадают с ISO-8859-1.
...
Рейтинг: 0 / 0
28.05.2007, 18:27:37
    #34556139
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
ТимоН"строка в любой кодировке".getBytes() - всегда юникод

"строка в любой кодировке"... приплыли. У меня сразу ряд вопросов.
1) У меня есть String s = "строка", как мне узнать её кодировку?
2) У меня есть String s = "строка", после ответа на первый вопрос оказалось что она всегда в кодировке ZZZ. Вопрос, как мне получить String s2 в другой кодировке?
...
Рейтинг: 0 / 0
28.05.2007, 18:29:14
    #34556141
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
ТимоН
Почти: В Юникоде первые 256 кодовых позиций совпадают с ISO-8859-1.
Оки-доки, босс. Следуя этой логикой, если у ASCII первые 128 позиций совпадают с ISO-8859-1, то ASCII тоже Unicode?
...
Рейтинг: 0 / 0
28.05.2007, 18:34:44
    #34556151
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
1. строка String str = "строка" - юникод, узнавать ничего ненадо
2. http://www.jug.ru/servlets/index?page=rus#recode
...
Рейтинг: 0 / 0
28.05.2007, 18:37:07
    #34556155
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
авторОки-доки, босс. Следуя этой логикой, если у ASCII первые 128 позиций совпадают с ISO-8859-1, то ASCII тоже Unicode? ок, ладно. Вы правы.
...
Рейтинг: 0 / 0
28.05.2007, 18:43:41
    #34556168
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
ТимоН1. строка String str = "строка" - юникод, узнавать ничего ненадо
Ты сам написал выше "строка в любой кодировке". Вот было интересно что такое кодировка по отношению к строке, которая представлена экземпляром класса String. Теперь, как я и ожидал, ты пишешь что строка всегда Unicode. Выходит Unicode и "любая кодировка" одно и то же, либо ты сам себе противоречишь.

ТимоН2. http://www.jug.ru/servlets/index?page=rus#recode
Не надо мне ссылок на всякие глупости, как и куда переганять байты я себе прекрасно представляю. А то что строка может показывать не то что хочется не есть призрак её не верной кодировки. Это признак того что byte[] был интерпретирован не правильно. То есть при его декодировании была подставлена не его кодировка.
...
Рейтинг: 0 / 0
28.05.2007, 18:51:38
    #34556180
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
авторТы сам написал выше "строка в любой кодировке". Вот было интересно что такое кодировка по отношению к строке, которая представлена экземпляром класса String. Теперь, как я и ожидал, ты пишешь что строка всегда Unicode. Выходит Unicode и "любая кодировка" одно и то же, либо ты сам себе противоречишь.

Ок. Видимо жара :)

Объясню на примере, что я имел ввиду. Какие бы вы данные нехранили в String в JVM они всегда unicode. Т.е. если вы не указали кодировку при чтении(к примеру) из файла (какой бы она небыла), то ваши данные считаются неверно. JVM ждет от вас unicode или указанную вами.
...
Рейтинг: 0 / 0
29.05.2007, 04:54:15
    #34556612
denissh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
всем привет...

есть некоторый текст, вот его дамп
56 65 72 6e 6f 2e 20 54 76
6f 6a 20 72 65 6a 74 69 6e 67 20 20 2d 20 32 31
2c 20 75 20 6c 69 64 65 72 61 20 2d 20 25 6c 65
61 64 65 72 5f 6d 61 72 6b 25 2e 20 0d 0a 50 6f
20 6e 61 72 6f 64 6e 6f 6a 20 70 72 69 6d 65 74
65 20 2d 20 65 73 6c 69 20 6e 65 76 65 73 74 61
20 63 68 69 68 61 65 74 20 75 74 72 6f 6d 20 6e
61 6b 61 6e 75 6e 65 20 73 76 61 64 20 62 79 2c
20 6f 6e 61 20 76 20 7a 61 6d 75

затем я его кодирую в 7 бит и получается

ac65 b9fb ed02 51ed 6f35
485e 56d3 d3ee 3308 d402 c962 2c50 1dc4
4e93 cbf2 30a8 052a b1cb 6172 59fe 6d87
e5eb 920b d450 40df 2077 58fe 26bb df6a
105c 9e6e 97e9 6550 0b54 9eb3 d320 77d9
5e9e d3c3 a031 3a8d 0e97 e9a0 3a5d fe6e
83dc e175 d85d 7797 4173 7b98 0c12 e759
a0b7 3b0c b283 f4e1 761d



затем я его отправляю по сети....и оно приходит в таком виде
3f 65 3f 3f 3f 02 51 3f 6f 35
48 5e 56 3f 3f 3f 33 08 3f 02 3f 62 2c 50 1d 3f
4e 3f 3f 3f 30 3f 05 2a 3f 3f 61 72 59 3f 6d 3f
3f 3f 3f 0b 3f 50 40 3f 20 77 58 3f 26 3f 3f 6a
10 5c 3f 6e 3f 3f 65 50 0b 54 3f 3f 3f 20 77 3f
5e 3f 3f 3f 3f 31 3a 3f 0e 3f 3f 3f 3a 5d 3f 6e
3f 3f 3f 75 3f 5d 77 3f 41 73 7b 3f 0c 12 3f 59
3f 3f 3b 0c 3f 3f 3f 3f 76 1d



т.е. некоторые символы заменяются на 3F...т.е. на знак вопроса


сообщение я формирую следующим образом:

Код: plaintext
1.
2.
3.
4.
ByteBuffer msg= new  ByteBuffer(); 
msg.appendBytes(TEXT.getBytes()); 
msg =  new  ByteBuffer(pack(msg.getBuffer()));   //кодирую в 7 бит
setMessage( new  String(msg.getBuffer()), ASCII);
вот....
...
Рейтинг: 0 / 0
29.05.2007, 08:08:27
    #34556707
y3u
y3u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
setMessage(new String(msg.getBuffer()), ASCII);

если в недрах этого метода не выполняется взяте байт от юникодной строки в аскишной кодировке, а просто ставится хидер, то, естественно, это не будет работать правильно...

ПыСЫ
а нафига ты его кодируешь в 7 бит? Нельзя чтоли сразу нужные байты получить?
...
Рейтинг: 0 / 0
29.05.2007, 08:36:18
    #34556743
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
И правда, а зачем ты после перекодирования опять new String делаешь? Твои байты уже не верно декодированы, и потом неверно декодированая строка передается в сообщении? В чем был глубинный смысл кодирования в 7 бит, если посылается обычная строка?
...
Рейтинг: 0 / 0
29.05.2007, 11:11:57
    #34557166
denissh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
в 7 бит кодировать - это для того чтобы в пакет, который передается по сети поместилось больше данных. На другом конце пакет принимают, и данные декодируют....кодировать нужно только латинские символы, т.е. первые 128...все остальные отправлять обычно (7 бит - это стандартная кодировка в GSM сети)

а в метод я кладу строку, потомучто реализация у библиотеки такая, только строку можно давать
Код: plaintext
1.
setMessage(String msg, String encoding);

можно конечно поковыряться в самой библиотеки и сделать метод для принятия массива байт,....
но это не 10 минут.......
да и я не понимаю, что это может изменить?
перевод в строку както неверно происходит?
...
Рейтинг: 0 / 0
29.05.2007, 11:36:31
    #34557274
y3u
y3u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение кодировки
ну раз так, то толку от твоего кодирования никакого нету, т.к. у тебя все равно строка в юникоде. Какую ты делаешь кодировку лучше скажи, и вообще, клади компилирующийся рабочий код, посмотрим, что можно сделать
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / изменение кодировки / 25 сообщений из 30, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]