-
Здравствуйте, уважаемые дамы и господа. Оч. люблю Ваш форум. Во многом помогал и помогает. Но увы. Столкнулся с проблемой, решение которой не могу по сей день найти.
Есть программа, которая принимает смс сообщения с USB GSM модема Teleofis RX101-r. Все сообщения принимает. Звонки делает. Так как мне не нужны сообщения в кирилице - форматом PDU не пользовался. НО! Столкнулся с проблемой, когда начал принимать длинные смс сообщения.
Под длинными смс я понимаю смс более 160 символов. Приходит полный ужас. Мало того, что приходит белиберда в Text режиме (вместо латинских букв), так то же самое и с PDU режимом.
Text режим (лог из Hyper Terminal) 1-я смс0500036003018275FADBF876839AE17C780D6AD35C34B9E2089D82682F596CAE40D3E970DD EBD576
B5C3F0B92B1F7693CB7897BCFEFAB17BED307C6E62B37BB019CC25ABC56E3718CB0673C164335CAE
6682D37BB019CC25ABC56E3718CB0673C164335CAE66D2F76233059A4E87EB5EAF7618EE0AD7E96F
F3DBED92D75FBFB5B937ABE564B3186C36ABDD00
Text режим (лог из Hyper Terminal) 2-я смс05000360030264329B6C47A3C977B21C0C178BC170B0DB2EB683CD602E592D76BBC1763698 0B269B
E172B51D8CB683C1603BD9CCB693D5603B986C172BE264BB1ACC18DCC166B0E6EEBA5BB676B05C6E
B792D97630457338ECC96A3045D339ECC1640A6670D88B157132C53049ECD560C6A0A2F926977BB0
19ACC9BAB2962DC5112A9D82E86FD0BC2CB79701
Text режим (лог из Hyper Terminal) 3-я смс050003600303E43AD0DB6C5608C3F45E2E5752D07B2B996D08
Ну я сразу подумал. Надо просто перевести в PDU режим и легче простого прочитать её. Но как оказалось не так уж и просто...
PDU режи (лог из Hyper Terminal) 1-я смс07919712999090F0400B919712577456F10000118092217315619F0500036003018275FADB F87683
9AE17C780D6AD35C34B9E2089D82682F196DAE40D3E970DDEBD576B5C3F0B92B1F7693CB7897BCFE
FAB17BED307C6E62B37BB019CC25ABC568B31ACB0673C164B31CCC6682D37BB019CC25ABC568B31A
CB0673C164B31CCC66D2F76233059A4E87EB5EAF7618EE0AD7E96FF3DBED92D75FBFB5B937ABE564
B3186C36ABDD00
PDU режи (лог из Hyper Terminal) 2-я смс07919712999090F0400B919712577456F10000118092217345619F05000360030264329B6C 47A3C9
77B21C0C178BC170B3DB2EB683CD602E592D469BD57636980B269BE560B61D8CB683C162BBD9CCB6
93D5603B986C172BE264BB1ACC18DCC166B0E6EEBA5BB676B05C6EB792D57630457338ECC96A3045
D339ECC1640A6670D88B157132C53049ECD560C6A0A2F926977BB019ACC9BAB2962DC5112A9D82E8
6FD0BC2CB79701
PDU режи (лог из Hyper Terminal) 3-я смс07919712999090F0440B919712577456F10000118092217365611C050003600303E43AD0DB 6C5608
C3F45E2E5752D07B2B596D08
Попытки перевести text режим ни к чему не привели. Попытка перевода PDU режима:
Перевод PDU режима 1-я смсSMSC#+79219909090
Sender:+79217547651
TimeStamp:29/08/11 12:37:51
TP_PID:00
TP_DCS:00
TP_DCS-popis:Uncompressed Text
class:0
Alphabet:Default
é@ø@6 @AutoFon¿è./Æùh:kΞCΨyèΦ_6Γ$cÄTM<¥ÉΨ 8364;xnäjΞ.?ΠHøä>Ξß7ΓnäøÖ üXäZCagMXYä¿f¿ÖdjbhfjXl¿Ö¿dfr¿ lL¿iä¿f¿Ödjbhfj¿@vΘßΠΠEal8 6;ΨvF¡IEΛ:?5U§åf_xVü,üoc7vΠuvo§5RߧV
Length:159
Перевод PDU режима 2-я смсSMSC#+79219909090
Sender:+79217547651
TimeStamp:29/08/11 12:37:54
TP_PID:00
TP_DCS:00
TP_DCS-popis:Uncompressed Text
class:0
Alphabet:Default
é@ø@6¡@2262;44r¥äB@ÅøåoØØzH 09;Å
åk$JK¤æ-o+cR£Λ€M/+ØBaÜø
åØ+zrÖøldj¿v¿dvb
qdvj¿ø¥w¿f¿Ξw.wΠÄv¿rrvVdjv¿	 23;Ξììädj¿Λj0F'fΠ@Θ=V£bXW&0ΘE& #161;gfVΣ(SpEd4wvùPIyfU)DqÅ%"*l.
Length:159
Перевод PDU режима 3-я смсSMSC#+79219909090
Sender:+79217547651
TimeStamp:29/08/11 12:37:56
TP_PID:00
TP_DCS:00
TP_DCS-popis:Uncompressed Text
class:0
Alphabet:Default
é@ø@6¿@r: off
$ù?
Ç/Ü.K¥2kZè
Length:28
Отсюда вопрос - что за дела-то такие получаются? Вроде и кодировка та. А не переводится. Или склеенные смс как-то по другому переводятся?
Текст там должен быть примерно следующим:
AutoFon Mayak m4.4r
GPS 9/26s
http://m.maps.yandex/?LI=037..........
http://map.autofon.ru/?kf=356895.......
MCC=250
MNC=99
LAC=568A
CID=L23C5
Mode=030M,S,K-
Move sensor: off
GPRS to server: off
Bat=99%
t=+25C
Господа, помогите пожалуйста с перекодировкой этих длинных смсок. Уже несколько дней ломаю себе голову. В перекодировщике, когда пытаюсь убрать некоторые "F" символы - у меня частично вылезает текст. Может быть проблема в этом? Кто знает. Отзовитесь.
Спасибо -
Anatoly Podgoretsky © (30.08.11 11:20) [1]> SaJek (30.08.2011 10:35:00) [0]
C английскими все в порядке, а русские в кодировке UTF-8 -
OW © (30.08.11 11:22) [2]совет дилетанта, но вдруг
а еще бы попробовать перед каждыми 7ми битами еще один добавить и попробовать декодировать -
> C английскими все в порядке, а русские в кодировке UTF-8
Так мне русские и не нужны. Мне лишь латиница нужна.
> совет дилетанта, но вдруг
> а еще бы попробовать перед каждыми 7ми битами еще один добавить
> и попробовать декодировать
Вот с этого места поподробнее. Мне что-то об этом говорили. Я ввожу данные в WinHEX. Просто тупо PDU текст. И что дальше делать-то?
Раскодировал я, кстати, с помощью http://twit88.com/home/utility/sms-pdu-encode-decode -
Медвежонок Пятачок © (30.08.11 11:33) [4]в пду семибитная кодировка.
исходное сообщение переводится в ucs, затем у каждого байта откусывается старший бит.
полученные семибитные байты толкаются "влево" таким образом, чтобы заполнять старшие биты.
а тебе нужно сделать наеборот. -
Anatoly Podgoretsky © (30.08.11 11:33) [5]А с английскими все нормально
> é@ø@6 @AutoFon¿è./Æùh:kΞCΨyèΦ_6Γ$cÄTM<¥ÉΨ 8364;xnäjΞ.?
> ΠHøä>Ξß7ΓnäøÖ üXäZCagMXYä¿f¿ÖdjbhfjXl¿Ö¿dfr¿ lL¿iä¿f¿Ödjbhfj¿@vΘßΠΠEal8
> 6;ΨvF¡IEΛ:?5U§åf_xVü,üoc7vΠuvo§5RߧV
Может UTF-7 -
Anatoly Podgoretsky © (30.08.11 11:36) [6]
-
> Медвежонок Пятачок
Может хоть как-то подтолкнете на код? Ибо со сдвигами этими я вообще не понимаю.
И почему короткие смс-ки (в 1 смс сообщение) читаются нормально?
> А с английскими все нормально
>
> > é@ø@6 @AutoFon¿è./Æùh:kΞCΨyèΦ_6Γ$cÄTM<¥ÉΨ 8364;xnäjΞ.
> ?
> > ΠHøä>Ξß7ΓnäøÖ üXäZCagMXYä¿f¿ÖdjbhfjXl¿Ö¿dfr¿ lL¿iä¿f¿Ödjbhfj¿@vΘßΠΠEal8
>
> > 6;ΨvF¡IEΛ:?5U§åf_xVü,üoc7vΠuvo§5RߧV
>
> Может UTF-7
Нормально да не совсем. Там ещё должны быть слова GPRS, t, Move sensor, CID, LAC, MCC, MNC...
Такое ощущение что где-то происходит сбой. Но понять почему? Я не в силах -
Омлет © (30.08.11 11:48) [8]А телефон это принимает нормально?
-
Вот именно что телефон принимает как надо. Но у него, видимо есть свой алгоритм чтения подобных смс. Я вот пытался в гугле найти инфу. Но даже не понимаю как запрос сделать нормально. Вылезает шлак всякий
-
OW © (30.08.11 11:51) [10]
> Вот с этого места поподробнее.
Символ1 Символ2 Символ3
пусть, кодируются как
11010101 10011111 11001100
возможно, первый бит "оборвали"
х1010101 х0011111 х1001100
полученное склеили
10101010 01111110 01100
получилось 2 байта и еще немного, но, для восстановления исходного
надо 1 (добавить самому) + 7 следующих, 1 (добавить самому) + 7 и т.д.,
тогда и будут исходные байты.
Возможно :)
> Может хоть как-то подтолкнете на код? Ибо со сдвигами этими
> я вообще не понимаю.
> И почему короткие смс-ки (в 1 смс сообщение) читаются нормально?
Нет, потому что лень. Плохо.
Не знаю. просто предлагаю вариант для попробовать. Восможно, поможет. А может и нет. -
Anatoly Podgoretsky © (30.08.11 12:05) [11]> SaJek (30.08.2011 11:38:07) [7]
Выданая ссылка, что совсем не помогла? -
> Выданая ссылка, что совсем не помогла?
По их коду выдаёт0j@f0`L3&3CHCjXgPFhT)$&Q7jH!f
!2eIc8`TL6`@&2nT1!Fp\1gLA
E93h
0Y DhLCfP'0pd!G8d*GM!A
QChL"9n@!D(!Dj\1&
0`L1L0dX!3FLBl"s&PCr\9#HLC`
s!Cb\#"BddNCY#&Q9d:cF!Cb\13FM8`c&!0j@f0`L3&3CHCjX gPFhT)$&Q7jH!f
!2eIc8 -
Самый то главный вопрос... Не читаются в ПДУ формате именно смс длинные. С короткими (в 1 смску) всё в порядке.
Тут просто какой-то специальный алгоритм.
Ребят. Ну может кто нибудь сталкивался? -
RWolf © (31.08.11 01:38) [14]multipart кодируются хитро, перед собственно текстом идут ещё поля, которые надо откусывать, прежде чем начинать декодировать 7-битные символы.
-
> multipart кодируются хитро, перед собственно текстом идут
> ещё поля, которые надо откусывать, прежде чем начинать декодировать
> 7-битные символы.
А есть более подробная инфа? Покопался в инете - не нашёл. Спасибо -
Вариант (31.08.11 15:57) [16]
> SaJek © (31.08.11 15:04) [15]
Я не разбирался сильно с мультипарт, но получил примерно следующее (первые 7 символов удалил у каждой PDU SMS, так что это подгонка, надо разбираться дальше)
"AutoFon Mayak m4.4r\nGPS 4/24s\nhttp://m.maps.yandex.ru/?l=maps&ll=030.251435,60.023906&pt=030.251435,60.023906&z=13\nhttp://map.autofon.ru/?kf=359231033572262;44r;2908110837;1;030.251435;60.023906;04;001;336;250;02;1E82 ;50FA;030M;W;K-;099;+25;0\nMCC=250\nMNC=02\nLAC=1E82\nCID=50FA\nMode=030M,W,K-\nGPRS to server: off\nBat=99%\nt=+25C".
Но
остальные буковки вроде как нормальные \n - новая строка. Раскодировал как обычную 7-битную смс. -
RWolf © (31.08.11 16:28) [17]
> А есть более подробная инфа? Покопался в инете - не нашёл.
> Спасибо
я в своё время нагуглил формат multipart SMS без проблем.
сейчас документации не осталось, но поля, о которых я говорю — это 6 байт перед текстом.
смотрим PDU SMS №1:
050003600301
здесь 05 — длина доп.поля, 60 — SMS sequence; 03 — всего частей, 01 — № части. -
> Вариант (31.08.11 15:57) [16]
>
> > SaJek © (31.08.11 15:04) [15]
>
>
> Я не разбирался сильно с мультипарт, но получил примерно
> следующее (первые 7 символов удалил у каждой PDU SMS, так
> что это подгонка, надо разбираться дальше)
> "AutoFon Mayak m4.4r\nGPS 4/24s\nhttp://m.maps.yandex.ru/?
> l=maps&ll=030.251435,60.023906&pt=030.251435,60.023906&z=13\nhttp:
> //map.autofon.ru/?kf=359231033572262;44r;2908110837;1;030.
> 251435;60.023906;04;001;336;250;02;1E82 ;50FA;030M;W;K-;
> 099;+25;0\nMCC=250\nMNC=02\nLAC=1E82\nCID=50FA\nMode=030M,
> W,K-\nGPRS to server: off\nBat=99%\nt=+25C".
> Но
> остальные буковки вроде как нормальные \n - новая строка.
> Раскодировал как обычную 7-битную смс.
Скажи пожалуйста. Как ты раскодировал? Всё верно. Именно так и расшифровывается смс-ка!!!!!!!!!!!!!!!!!!! -
Вариант (01.09.11 08:20) [19]
> RWolf © (31.08.11 16:28) [17]
Вот видно их я и удалял, не разобравшись с multipart.
> SaJek © (31.08.11 18:28) [18]
Раскодировал я не правильно, подгонка скажем так, о чем уже писал. Тебе надо найти доку по этому вопросу. А я просто представил
> PDU режи (лог из Hyper Terminal) 1-я смс
> 07919712999090F0400B919712577456F10000118092217315619F0500036003018275FADB
> F87683
> 9AE17C780D6AD35C34B9E2089D82682F196DAE40D3E970DDEBD576B5C3F0B92B1F7693CB7897BCFE
>
> FAB17BED307C6E62B37BB019CC25ABC568B31ACB0673C164B31CCC6682D37BB019CC25ABC568B31A
>
> CB0673C164B31CCC66D2F76233059A4E87EB5EAF7618EE0AD7E96FF3DBED92D75FBFB5B937ABE564
>
> B3186C36ABDD00
как одну СМС, выделил в первой части на основе поле текста и начиная от него до конца СМС удалил все символы, не принадлежащие ['0'..'9','A'..'F'], убрав служебную инфо и слив текстовые части в один поток, не закладываясь на поля длинный текста - что опять подчеркиваю является неверным, надо найти нормальную доку и делать как положено.
А раскодировка уже самих символов проста - каждую пару в шестнадцатиричном формате я перевел в байт и получил поток байт, содержащий 7-битные символы. Старший бит 1 -го байта является младшим битом второго семибитного символа, а уже старшие два бита второго байта являются двумя младшими битами третьего символа и т.д. Таким образом у нас накапливается постоянно N-ое число бит, которые переходят в следующий символ. Когда число этих бит в остатке становится =7, то у нас набежал целый символ, потому вставляем его без учета следующего байта из текстового потока, и начинаем обрабатывать следующий байт и всю последующую цепочку, как первый байт...