реклама на сайте
подробности

 
 
> Отправка SMS кирилицей
blox
сообщение Jul 24 2010, 18:32
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 18-07-10
Из: Челябинск
Пользователь №: 58 496



Извиняюсь за столь избитый вопрос,
подскажите пожайлуста как лучше работать с SMS на русском языке?
я только начал знакомиться с SIM300, видел что он будет снят с производства, но он у меня уже есть rolleyes.gif
SIM300 поддерживает передачу как в текстовом режиме так и в pdu, какой режим лучше выбрать?

Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 19)
*antzol*
сообщение Jul 24 2010, 19:27
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 6-11-07
Пользователь №: 32 085



Чтобы кирилицей - только pdu.
Go to the top of the page
 
+Quote Post
blox
сообщение Jul 24 2010, 19:34
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 18-07-10
Из: Челябинск
Пользователь №: 58 496



Цитата(*antzol* @ Jul 25 2010, 01:27) *
Чтобы кирилицей - только pdu.

а в текстовом формате разве нельзя ? если использовать UCS2 или я что-то путаю?
Go to the top of the page
 
+Quote Post
*antzol*
сообщение Jul 24 2010, 20:10
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 6-11-07
Пользователь №: 32 085



Цитата(blox @ Jul 24 2010, 22:34) *
а в текстовом формате разве нельзя ? если использовать UCS2 или я что-то путаю?

Извиняюсь. Соврал.
Go to the top of the page
 
+Quote Post
Samodelkin
сообщение Jul 25 2010, 08:02
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 102
Регистрация: 29-05-05
Из: Днепропетровск
Пользователь №: 5 520



Цитата(blox @ Jul 24 2010, 21:34) *
а в текстовом формате разве нельзя ? если использовать UCS2 или я что-то путаю?


AT+CMGF=1
AT+CSCS="UCS2"
AT+CSMP=17,167,0,25

после этого можно отправлять и принимать сообщения на русском языке с Юникоде. Только и номер куда отправляется тоже набирать в Юникоде. При этом каждый символ придется передавать 4-мя байтами. Например цифра 1 будет выглядеть 0x30 0x30 0x33 0x31. А русская буква "А" - 0x30 0x34 0x31 0x30
Go to the top of the page
 
+Quote Post
blox
сообщение Jul 25 2010, 10:47
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 18-07-10
Из: Челябинск
Пользователь №: 58 496



Большое спасибо за ответ!!! пока даже представления не имею о возможном кодирование и декодирование этого
формата подскажите что нужно посмотреть, почитать и какой из форматов будет менее проблемотичным со стороны
алгоритма.
Заранее Спасибо!!!
Go to the top of the page
 
+Quote Post
Samodelkin
сообщение Jul 25 2010, 13:48
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 102
Регистрация: 29-05-05
Из: Днепропетровск
Пользователь №: 5 520



Цитата(blox @ Jul 25 2010, 12:47) *
Большое спасибо за ответ!!! пока даже представления не имею о возможном кодирование и декодирование этого
формата подскажите что нужно посмотреть, почитать и какой из форматов будет менее проблемотичным со стороны
алгоритма.
Заранее Спасибо!!!


Реализуйте как вам кдобно. Просто берете код каждого русского символа в Юникоде (в инете этого полно) и ракладываете 2 байта на 4 полубайта и превращаете в указанный мной вид. И все.
Go to the top of the page
 
+Quote Post
blox
сообщение Jul 25 2010, 15:32
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 18-07-10
Из: Челябинск
Пользователь №: 58 496



Цитата(Samodelkin @ Jul 25 2010, 19:48) *
Реализуйте как вам кдобно. Просто берете код каждого русского символа в Юникоде (в инете этого полно) и ракладываете 2 байта на 4 полубайта и превращаете в указанный мной вид. И все.

Извините пожайлуста, а почему нужно раскладывать два байта? один символ в UCS2 представлен двумя байтами,
я не понимаю help.gif
Go to the top of the page
 
+Quote Post
Samodelkin
сообщение Jul 25 2010, 20:26
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 102
Регистрация: 29-05-05
Из: Днепропетровск
Пользователь №: 5 520



Цитата(blox @ Jul 25 2010, 17:32) *
Извините пожайлуста, а почему нужно раскладывать два байта? один символ в UCS2 представлен двумя байтами,
я не понимаю help.gif


Ну я же написал!!!!!
Напрмер цифра 1 в юникоде выглядит так - 0х0031
но модуль принимает только ASCII символы. Вот и надо 0х0031 передать посимвольно "0" "0" "3" "1". Т.е. 0х30 0х30 0х33 0х31. И аналогичным образом все остальные симолы.

Сообщение отредактировал Samodelkin - Jul 25 2010, 20:32
Go to the top of the page
 
+Quote Post
sobr
сообщение Jul 26 2010, 03:04
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 926
Регистрация: 18-01-07
Пользователь №: 24 552



Может чем и поможет?
Go to the top of the page
 
+Quote Post
Master of Nature
сообщение Jul 26 2010, 05:20
Сообщение #11


Мыслящий
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 20-07-07
Из: Самара
Пользователь №: 29 270



Цитата(sobr @ Jul 26 2010, 07:04) *

Лучше скачайте оттуда и выложите сюда, т.к. там для скачивания требуется регистрация.


--------------------
FAQ по AD
Форум по AD
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью.
...стоит запомнить ...вернее задуматься.
Go to the top of the page
 
+Quote Post
sobr
сообщение Jul 26 2010, 06:35
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 926
Регистрация: 18-01-07
Пользователь №: 24 552



Цитата(Master of Nature @ Jul 26 2010, 12:20) *
Лучше скачайте оттуда и выложите сюда, т.к. там для скачивания требуется регистрация.

Зачем мне от туда скачивать, это моя утилита.Прикрепленный файл  ucs2.rar ( 852.25 килобайт ) Кол-во скачиваний: 134
Go to the top of the page
 
+Quote Post
etoja
сообщение Jul 26 2010, 06:50
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 121
Регистрация: 14-01-05
Из: Москва
Пользователь №: 1 952



Вот официальные кодировки. Не забудьте прочитать параграф Terms of Use, где написано, что использование
этих кодировок в коммерческих целях требует письменного разрешения.
Прикрепленные файлы
Прикрепленный файл  cyrillic_unicode.pdf ( 262.04 килобайт ) Кол-во скачиваний: 123
 
Go to the top of the page
 
+Quote Post
blox
сообщение Jul 26 2010, 08:40
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 18-07-10
Из: Челябинск
Пользователь №: 58 496



А не подскажите каким лучше методом воспользоваться: создать таблицу и и сравнивать табличным методом или
есть более рациональные методы?
Go to the top of the page
 
+Quote Post
Master of Nature
сообщение Jul 26 2010, 08:59
Сообщение #15


Мыслящий
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 20-07-07
Из: Самара
Пользователь №: 29 270



Цитата(blox @ Jul 26 2010, 12:40) *
А не подскажите каким лучше методом воспользоваться: создать таблицу и и сравнивать табличным методом или
есть более рациональные методы?

Вообще-то коды можно пересчитывать из ASCII (как вариант) или как-то по-другому.
Но в любом случае, подумайте, а в каком виде вы будете вводить эти строки в программу?
Для автоматизированной обработки необязательно пользоваться русским языком. А для удобства восприятия - вы все равно сделаете набор строковых констант. Так что, достаточно один раз перекодировать.


--------------------
FAQ по AD
Форум по AD
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью.
...стоит запомнить ...вернее задуматься.
Go to the top of the page
 
+Quote Post
Samodelkin
сообщение Jul 26 2010, 10:46
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 102
Регистрация: 29-05-05
Из: Днепропетровск
Пользователь №: 5 520



Цитата(blox @ Jul 26 2010, 10:40) *
А не подскажите каким лучше методом воспользоваться: создать таблицу и и сравнивать табличным методом или
есть более рациональные методы?


лично я на Си делаю так:


Data16 - 2-х байтовая переменная в которой находится символ в русской кодировке.

USART_Transmit(((Data16&0xF000)>>12)|0x30);
USART_Transmit(((Data16&0x0F00)>>8)|0x30);
USART_Transmit(((Data16&0x00F0)>>4)|0x30);
Data16 = Data16&0x000F;
if((Data16>=0) && (Data16<=9)) {USART_Transmit(Data16|0x30);}
else {USART_Transmit(Data16+0x37);}


В результате в модуль вместо 1-го двухбайтового значения отправляется 4 байта в кодировке ASCII

Сообщение отредактировал Samodelkin - Jul 26 2010, 10:48
Go to the top of the page
 
+Quote Post
blox
сообщение Jul 26 2010, 12:06
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 18-07-10
Из: Челябинск
Пользователь №: 58 496



Цитата(Master of Nature @ Jul 26 2010, 14:59) *
Вообще-то коды можно пересчитывать из ASCII (как вариант) или как-то по-другому.
Но в любом случае, подумайте, а в каком виде вы будете вводить эти строки в программу?
Для автоматизированной обработки необязательно пользоваться русским языком. А для удобства восприятия - вы все равно сделаете набор строковых констант. Так что, достаточно один раз перекодировать.

Да я так и думаю сделать, но пока ума не приложу как обрабатывать входные смс которые будут введены кирилицей.
Огромное спасибо за пример Samodelkin буду пробовать, пока ещё не всё понял, но в процессе думаю разберусь rolleyes.gif
Go to the top of the page
 
+Quote Post
sobr
сообщение Jul 26 2010, 12:09
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 926
Регистрация: 18-01-07
Пользователь №: 24 552



Обратите Ваше внимание на буквы ё и Ё.
Go to the top of the page
 
+Quote Post
blox
сообщение Jul 26 2010, 12:18
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 18-07-10
Из: Челябинск
Пользователь №: 58 496



Цитата(sobr @ Jul 26 2010, 18:09) *
Обратите Ваше внимание на буквы ё и Ё.

Спасибо!!! я уже заметил что Ё находиться в начале диапазона
Go to the top of the page
 
+Quote Post
Samodelkin
сообщение Jul 26 2010, 12:20
Сообщение #20


Частый гость
**

Группа: Участник
Сообщений: 102
Регистрация: 29-05-05
Из: Днепропетровск
Пользователь №: 5 520



Цитата(blox @ Jul 26 2010, 14:06) *
Да я так и думаю сделать, но пока ума не приложу как обрабатывать входные смс которые будут введены кирилицей.
Огромное спасибо за пример Samodelkin буду пробовать, пока ещё не всё понял, но в процессе думаю разберусь rolleyes.gif


А это обратное преобразование. Т.е. из каждых 4-х байт одного символа из GSM модуля в формате ASCII формирование одного 16-разрядного символа в Юникоде. Например, из 4-х байт 0х30, 0х34, 0х31, 0х30 формируеься один байт 0х0410 что соответствует букве "А" русского алфавита. На изящность програмного решения не претендую. Но работает без проблем.

unsigned int dig1 = перый символ из 4-х
unsigned int dig2 = второй символ из 4-х
unsigned int dig3 = третий символ из 4-х
unsigned int dig4 = четвертый символ из 4-х

if((dig1 >= 0x30) && (dig1 <= 0x39)) {dig1 = 0x000F&dig1;}
else if((dig1 >= 0x41) && (dig1 <= 0x46)) {dig1 -= 0x37;}
if((dig2 >= 0x30) && (dig2 <= 0x39)) {dig2 = 0x000F&dig2;}
else if((dig2 >= 0x41) && (dig2 <= 0x46)) {dig2 -= 0x37;}
if((dig3 >= 0x30) && (dig3 <= 0x39)) {dig3 = 0x000F&dig3;}
else if((dig3 >= 0x41) && (dig3 <= 0x46)) {dig3 -= 0x37;}
if((dig4 >= 0x30) && (dig4 <= 0x39)) {dig4 = 0x000F&dig4;}
else if((dig4 >= 0x41) && (dig4 <= 0x46)) {dig4 -= 0x37;}
dig1 = (dig1<<12) + (dig2<<8) + (dig3<<4) + dig4;

В результате в переменной dig1 будет содержаться тот самый 16-разрядный символ в Юникоде
Собственно говоря такую процедуру надо провести для всех блоков по 4 байта в принятом SMS. Это чтоб потом можно было сравнивать с образцовой строкой из памяти программ или EEPROM, например.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 09:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01526 секунд с 7
ELECTRONIX ©2004-2016