使用MircoPython转换PUD编码发送中文短信
利用MircoPython的ESP32驱动安信可的A9发短信时,发现其发送中文短信的PUD编码资料有点少。经测试后总结如下:
文章目录
- 一、PUD编码结构
- 简单应用版:
- 具体结构:
- PUD编码测试网站:[链接](http://www.sendsms.cn/pdu/)
- 二、处理电话号码
- 三、将正文转换为Unicode编码
- 四、 组合形成完整命令
一、PUD编码结构
详细版:链接
简单应用版:
具体结构:
- 固定命令:
0001000D91
- 带区号的接收方电话号码头去+号,如果是电话长度奇数则末尾加上F,交换奇偶位
- 固定命令:
008
- 发送Unicode编码长度(两个字符)
- 使用Hex形式字符串Unicode编码组成的正文
注:以上都是字符流,并不是16进制。
PUD编码测试网站:链接
二、处理电话号码
注:这里默认给的phoneNumber只带区号没有+
def handlePhoneNumber(self,phoneNumber):'根据PUD规范,带区号的电话号码头去+号,如果是电话长度奇数则末尾加上F,交换奇偶位'if(len(phoneNumber)%2):#+F补成偶数phoneNumber+="F"result=""#交换奇偶,python字符串不能改,只能另外赋值for j in range(0,len(phoneNumber),2):result+=phoneNumber[j+1]+phoneNumber[j]return result
三、将正文转换为Unicode编码
此处收到这位大佬的文章的启发,后面发现MicroPython是支持直接使用ord()命令来获取Unicode,所以事情变得比较简单。
def getUnicodeFromUTF8Char(char):"获取UTF8字符的Unicode的字符Hex编码(用4个位十六进制字符串表示)"result=hex(ord(char))[2:]#去除前面的0xif(len(result)%2==1):#长度非偶数前面补0result="0"+resultif(len(result)==2):#只有一个字符,补0补成4位result="00"+resultreturn result
四、 组合形成完整命令
接着就是按照格式组装出完整的PUD代码了。由于使用AT命令发送短信时,往往需要调用AT+CMGS=n(n是长度)
,在发送PUD编码,故返回一个元组。
def getPUDCode(sendNumber,utf8Text):"电话号码带区号(不带+),返回一个元组,其中第一个字节是CMGS的长度,第二个是正文"result={} #固定前缀result[1]="0001000D91"#加上处理后的电话号码result[1]+=self.handlePhoneNumber(sendNumber)#加上后戳result[1]+="0008"#加上正文长度,并去除前缀textLen=hex(2*len(utf8Text))[2:]if(len(textLen)==1):#当长度只有一位时,先补0result[1]+="0"result[1]+=textLenfor char in utf8Text:result[1]+=self.getUnicodeFromUTF8Char(char)#计算长度,开始的00不计入result[0]=str(int((len(result[1])/2))-1)return result
使用MircoPython转换PUD编码发送中文短信相关推荐
- Python操作SIM800C发送中文短信
前言 项目上需要实现一个自动发送短信的功能, 由于是内网环境, 所以不能调用阿里之类的短信业务, 于是想着着手从传统的短信猫方式进行实现, 不过某宝上现在已经屏蔽了短信猫相关的关键词, 不过可以搜US ...
- Wavecom gsm 模块发送中文短信
Wavecom gsm 模块发送中文短信 这今天被wavecom 模块发送中文短信的事搞的头大,不过最后还是成功了. 说一说整个事的过程吧! 首先说一下这个事情的背景: 我们公司有条产品线是嵌入式计算 ...
- 51单片机控制SMI800Cgsm模块发送中文短信
使用AT89C51单片机控制SMI800Cgsm模块发送中文短信.使用STM32发送短信敬请等待... #include "config.h" #include "str ...
- android短信发送乱码,解决CEMAPI发送中文短信时会乱码
作者:陈缘 联系:luandao2000@gmail.com 博客:http://blog.csdn.net/luandao2000 主页:http://www.spbase.com 这个问题 所有用 ...
- 基于STM32与GSM模块发送中英文短信
基于STM32与GSM模块发送中英文短信 最近在做毕业设计有用到GSM模块进行短信报警,模块的功能比较多这里就不介绍了,一般的拨打电话都很简单就只需要一条指令即可,发送英文短信也很简单也只要几条命令也 ...
- STM32使用GSM模块发送中英文短信(TEXT模式到PDU模式的转换)
STM32使用GSM模块发送中英文短信(TEXT模式到PDU模式的转换) 目的是按下按键,短信发送 PDU转换网站 链接: PDU转换网站. 使用硬件: ··· 开发板:正点原子战舰V3 GSM模块: ...
- java usc2短信编码_手机短信PDU编码与解码
编码代码: / ///文 件:PDUdecoding.cs ///程 序 员:klude ///编制日期:2007-11-04 ///概 要:针对国内短信编码(USC2) ///组成结构:包含四个函数 ...
- 使用AT指令发送PDU短信的全过程
本文以一个实例来解说AT指令发送PDU短信的全过程,假如我要发送下面的短信: 接收号码:+8615215029639 短信内容:工作愉快! 短信中心号码:+8613800230500 一.短信中心号码 ...
- 通过PC发送手机短信
手机短信发送² 中文转换成Unicode码函数 因为手机短消息的发送是以PDU串的形式发送出去的,中文字符以Unicode码来表示,所以在发送中文短消息之前必须首先将中文字符转换为Uni ...
最新文章
- 学编程必看:逻辑思维测试
- tensorflow saver_TensorFlow: Model Persistence
- 计算机与操作系统简介
- 盘点:2019年最赚钱的10种编程语言
- Longest Palindrome CodeForces - 1304B(思维)
- 判断浏览器版本语句大全
- pandas后台导出excel_pandas导出Excel表格,银行卡号、身份证号无法正常显示的问题,该怎么解决?...
- day06【后台】两套分配
- FSO对象新建、打开、保存文件
- Dijkstra算法——最短路径(转)
- 在Linux系统下更改或更新SSH密钥密码的方法
- mysql:分组中某字段最大值的查询结果
- Android内存优化
- 片袖原型制图_袖原型一片袖打版干货
- 组合数学(2)——组合矩阵
- com.mysql.jdbc.driver jar下载_com.mysql.jdbc.Driver
- 【面试题】数字转成汉字形式
- [MySQL远程备份策略举例]
- 计算机备份应用程序无法启动,由于内部错误,备份应用程序无法启动如何解决-解决“由于内部错误,备份应用程序无法启动”的方法 - 河东软件园...
- 两轮自平衡车系统的模型构建