Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > JAVA Micro Edition

JAVA Micro Edition Низкоуровневое программирование мобильных телефонов.

Ответ
 
Опции темы
Старый 28.10.2008, 11:11   #1
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Сжать текст смс средствами J2me

Вот:
http://www.mobilab.ru/articles/94/

Наверно, все это уже читали. Мне нужно реализовать примерно такое же, но я не могу использовать BinaryMessage, так как смс будет отправляться не на мобилу, а на короткий платный номер, где приём и декодирование сообщения будет производить сервер. А смс билинги не поддерживают приём бинарных сообщений. В статье, которую я упомянул вначале, написано, что в обыкновенном сообщении используется 7-и битное кодирование (либо юникод, если встречаются символы, которые не влазят в 7-и битный диапазон). 7 бит - это значит 128 возможных символов. Я взял телефон и начал набирать все возможные символы, которые не переключают месаджбокс в юникод (телефон сименс с75, вверху он показывает сколько ещё можно ввести сообщений, по числу сразу понятно в каком режиме в данный момент набирается смс - юникод или 7-и битная латиница). В итоге я смог набрать больше 130 символов. О_о И кодирование показывает 7-и битное. Как так? Это же невозможно! Возможно ли, что просто телефон неправильно что-то считает и при отправке сообщение перекодируется в юникод и денег с меня снимут как за две смс? Но суть-то не в этом. Дело в том, что билинг принимает только одиночные смс (либо 70 символов в режиме юникода, либо 160 в режиме 7-и бит). А задача такая: нужно реализовать отправку сообщений на русском и английском языках + набор знаков препинания и основных спец символов, но 70 символов катастрафически мало. В той статье описан очень подходящий способ, но, как я уже сказал, билинг не принимает бинарные сообщения. По сути, какая разница, какое кодирование, общий размер данных-то в любом случае 1120 бит. НО! Я не знаю, как правильно представить данные в семибитном виде и скормить их в проге отправщику смс!!! Я вон вообще насчитал в семибитном кодировании больше 130 символов. Короче, помогите, подскажите! Советуйте всё, что только придёт на ум, главное по теме. У меня у брата можно смс бесплатно отправлять (с тела на тел, не в билинг), так что в тестинге можно не ограничиваться и не бояться упасть в минус =)
- - -
Добавил позже:
Вот ещё по теме нашёл:
http://isms.ru/article.shtml?art_7

Последний раз редактировалось Phantom, 28.10.2008 в 13:54.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
snikers (28.10.2008)
Старый 28.10.2008, 13:06   #2
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Сжать текст смс средствами J2me

Грубо говоря, задача сводится вот к чему:
1) У меня есть байтовый массив, размером 140 элементов (1120 бит, ровно размер одного смс сообщения), то есть данные, размером 140 байт (что в них, текст, картинка и т. п. - это не важно).
2) Нужно переделать этот массив в строку из 160 символов (в java символы в строке будут в юникоде, но при передаче в мессаджконнектор строка по ходу сама перекодируется в семибитную кодировку), которые позволено использовать при отправке смс на латинице.

Ладно бы, если коды этих символов находились от 0 до 127, но я понятия не имею в каком порядке они в юникоде находятся и все ли из них входят в первые 128 байт! Статья, которую я упомянул в конце предыдущего сообщения вроде как приоткрывает завесу, надо придумывать что-то. Вот только брат, засранец, отключил услугу бесплатных смс сегодня. Теперь смс платные :'(
(Offline)
 
Ответить с цитированием
Старый 28.10.2008, 13:19   #3
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Сжать текст смс средствами J2me


http://ru.wikipedia.org/wiki/Символы....D 1.82.D1.8C ?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 28.10.2008, 13:52   #4
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Сжать текст смс средствами J2me

Ээээ... Как-то не в тему. Мне спецификация юникода и utf-8 уже во сне снится =) Тут же нужно в семибитную кодировку переделать. Точнее даже преобразовать массив байт в строку, состоящую из символов, которые при использовании в смс преобразуются в семибитное представление при передаче смс. Во как. гг
(Offline)
 
Ответить с цитированием
Старый 28.10.2008, 13:53   #5
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Сжать текст смс средствами J2me

Ой. Огромное сорри. Вторую ссылку в первом посте написал такую же, как и первую. Скопировал не от туда, откуда надо видимо. Исправил. Теперь ссылка та.
(Offline)
 
Ответить с цитированием
Старый 28.10.2008, 14:28   #6
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Сжать текст смс средствами J2me

Так. Кажется придумал как сделать. Подскажите, как в java байты мне в семибитное представление переделать? То есть у меня есть 140 байт в массиве, а мне нужно переделать их в другой массив из 160 элементов, каждый должен иметь вид 0xxxxxxx. Пример:

Было:
b[0] = 00000000
b[1] = 11001100
b[2] = 11111111

Стало:
b[0] = 00000000
b[1] = 00110011
b[2] = 00011111
b[2] = 01110000

Это я схематично объяснил. Короче мне нужно как-то массив байт на биты разложить и их разделить в другой массив, но уже по семь бит. Блин, никогда с подобным не сталкивался, сложно объяснить.
(Offline)
 
Ответить с цитированием
Старый 28.10.2008, 17:28   #7
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Сжать текст смс средствами J2me

http://ru.wikipedia.org/wiki/UUE ?!
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Phantom (28.10.2008)
Старый 28.10.2008, 17:34   #8
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Сжать текст смс средствами J2me

ВО!!! Там пример очень хороший! Где "Пример кодирования" примерно так мне и надо сделать как-то! Как мне такое в Java замутить?
- - -
А ведь в base64 похожая система, да? Тут где-то либа для мидлет паскаля была для этого, попробую её декомпильнуть.

Последний раз редактировалось Phantom, 28.10.2008 в 17:47.
(Offline)
 
Ответить с цитированием
Старый 28.10.2008, 18:41   #9
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Сжать текст смс средствами J2me

Вот блин. Сейчас я буду жёстко ламерить. Нифига не понял эту строку:
head=bytes[0]&0xff|bytes[1]<<8&0xff00;
Видимо какие-то операции с битами. Объясните плиз, как оно работает или дайте ссылку какую-нибудь полезную, желательно на русском.
(Offline)
 
Ответить с цитированием
Старый 28.10.2008, 19:04   #10
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
charUUEcode(char *in,unsigned size){
    
unsigned code_size=(size/double(3)+1)*4+1;
    
char *out=new char[code_size];
    
unsigned char s[3];
    
unsigned char c[4];
    
unsigned i,j,k;

    
k=0;
    for(
i=0;i<size;i+=3){

        for(
j=0;j+i<size && j<3;j++){
            
s[j]=in[i+j];
        }
        for(;
j<3;j++)
            
s[j]=0;

        
c[0]=(s[0]&0xFC)>>2;
        
c[1]=((s[0]&0x03)<<4)+((s[1]&0xF0)>>4);
        
c[2]=((s[1]&0x0F)<<2)+((s[2]&0xC0)>>6);
        
c[3]=(s[2]&0x3F);

        for(
j=0;j<4;j++)
            
c[j]+=32;

        for(
j=0;j<4;j++)
            
out[k+j]=c[j];
        
k+=j;

    }
    
out[k]=0;

    return 
out;

charUUEdecode(char *in,unsigned &size){
    
unsigned code_size=(size/double(4)+1)*3+1;
    
char *out=new char[code_size];
    
unsigned char c[3];
    
unsigned char s[4];
    
unsigned i,j,k;

    
k=0;
    for(
i=0;i<size;i+=4){
        for(
j=0;j+i<size && j<4;j++){
            
s[j]=in[i+j];
        }
        for(;
j<4;j++)
            
s[j]=0;

        
c[0]=s[0]-32;
        
c[1]=s[1]-32;
        
c[0]<<=2;
        
c[0]|=(c[1]>>4)&0x03;
        
c[1]<<=4;
        
c[2]=s[2]-32;
        
c[1]|=(c[2]>>2)&0x0F;
        
c[2]<<=6;
        
c[2]|=(s[3]-32)&0x3F;


        for(
j=0;j<3;j++)
            
out[k+j]=c[j];
        
k+=j;


    }
    
out[k]=0;
    
size=k;

    return 
out;

это вот на С++

Сообщение от Phantom_wc Посмотреть сообщение
Вот блин. Сейчас я буду жёстко ламерить. Нифига не понял эту строку:
head=bytes[0]&0xff|bytes[1]<<8&0xff00;
Видимо какие-то операции с битами. Объясните плиз, как оно работает или дайте ссылку какую-нибудь полезную, желательно на русском.
& - как парвило коньюнкция
| - дизъюнкция
<< - сдвиг влево
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?

Последний раз редактировалось impersonalis, 28.10.2008 в 20:57.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Phantom (28.10.2008)
Старый 28.10.2008, 19:44   #11
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Сжать текст смс средствами J2me

& - как парвило коньюнкция
| - дизъюнкция
<< - сдвиг влево
Слова знакомые, но что они обозначают и как это на практике применять - вообще хз =) Пойду гуглить и википедить.
(Offline)
 
Ответить с цитированием
Старый 28.10.2008, 21:41   #12
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Сжать текст смс средствами J2me

Прочитал я про конъюнкцию и дизъюнкцию. Круто! Как я раньше про такое не слышал??? Это ж такие интересные штуки можно вытворять!!! Сейчас ещё про сдвиги почитаю!
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (28.10.2008)
Старый 29.10.2008, 19:32   #13
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Сжать текст смс средствами J2me

Так. Работа идёт. Сейчас нужно сделать массив из 128 символов, которые допускается отправлять в смс в режиме семибитки. Список, который находится по ссылке из первого поста не катит. С ним точно что-то не так. Если я беру из него все 128 символов, и вставляю в редактор смс, то телефон включает режим юникода =( Что делать? У меня тупая просьба. Попробуйте ввести в редакторе смс все символы, которые только позволяет телефон, и которые не переводят редактор в режим юникода. Напомню, в режиме семибитки в одно смс влазит 160 символов, а в режиме юникода - 70. Надеюсь на помощь. Потому что в нете не нашёл ничего путного =(
(Offline)
 
Ответить с цитированием
Старый 30.10.2008, 01:03   #14
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Сжать текст смс средствами J2me

Ура, товарищи!!! Нашёл статью: http://www.rattler.kiev.ua/node/16
Она пролила на всё свет!!! Теперь всё встало на свои места!
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (30.10.2008)
Старый 30.10.2008, 16:48   #15
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Сжать текст смс средствами J2me

Так. В таблице, которая находится в википедии, ошибка. Там регистр одного символа не верен. Надо "з" вместо "З". 127 символов, все кроме [ESC] подходят! И отправляются в одиночном смс. Но вот незадача. Я не знаю, что за [ESC] символ. Если верить википедии, то это цитирую:
In the ASCII character code, the character ESC with decimal code 27 and hexadecimal code 1B.
И на самом деле в моём любимом редакторе Notepad2 этот символ обозначается как [ESC]. Но при вставливании этого символа в сообщение (хоть программно, хоть руками через буфер обмена в текстовый редактор сообщения), сообщение переключается в режим юникода. В статье, в предыдущем посте написано, что этот символ используется для ввода некоторых дополнительных символов, например "[ESC](" преобразуется в "{", "[ESC]=" в "~"... Если, конечно, я вручную такую последовательность введу, то они не преобразуются, преобразование происходит на уровне прошивки телефона видимо. То есть я сразу ввожу { или ~, но при передачи сообщения, эти символы принимают вид этих последовательностей. И, видимо, ВНЕ последовательностей одиночный символ [ESC] использовать нельзя. У кого есть какие мысли на этот счёт? Можно использовать вместо него { или ~, ну или вот ещё символы, которые можно закодировать последовательностью с [ESC]: }^\[]|€, но в таком случае один из 128 символов будет иметь размер в два символа. То есть нельзя наперёд сказать, что в отведённый под смс размер в 160 символов влезет именно 160 символов. А если всё сообщение будет состоять из кучи { (либо }^\[]|€), то в сообщение влезет только 80 символов. То есть никакой универсальности, в общем, это очень неудобно. Кто что посоветует?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что помогает сдать экзамен impersonalis Болтовня 14 23.06.2010 16:48
2D средствами 3D giraf 3D-программирование 5 17.09.2009 20:41
UTF-8 и J2me Phantom JAVA Micro Edition 4 11.09.2009 04:19
Прозрачность png/gif в стандартными средствами Blitz3D ELIAS Blitz3D 12 19.07.2009 00:53


Часовой пояс GMT +4, время: 04:13.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com