利用MircoPython的ESP32驱动安信可的A9发短信时,发现其发送中文短信的PUD编码资料有点少。经测试后总结如下:

文章目录

  • 一、PUD编码结构
    • 简单应用版:
      • 具体结构:
    • PUD编码测试网站:[链接](http://www.sendsms.cn/pdu/)
  • 二、处理电话号码
  • 三、将正文转换为Unicode编码
  • 四、 组合形成完整命令

一、PUD编码结构

详细版:链接

简单应用版:

具体结构:

  1. 固定命令:0001000D91
  2. 带区号的接收方电话号码头去+号,如果是电话长度奇数则末尾加上F,交换奇偶位
  3. 固定命令:008
  4. 发送Unicode编码长度(两个字符)
  5. 使用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编码发送中文短信相关推荐

  1. Python操作SIM800C发送中文短信

    前言 项目上需要实现一个自动发送短信的功能, 由于是内网环境, 所以不能调用阿里之类的短信业务, 于是想着着手从传统的短信猫方式进行实现, 不过某宝上现在已经屏蔽了短信猫相关的关键词, 不过可以搜US ...

  2. Wavecom gsm 模块发送中文短信

    Wavecom gsm 模块发送中文短信 这今天被wavecom 模块发送中文短信的事搞的头大,不过最后还是成功了. 说一说整个事的过程吧! 首先说一下这个事情的背景: 我们公司有条产品线是嵌入式计算 ...

  3. 51单片机控制SMI800Cgsm模块发送中文短信

    使用AT89C51单片机控制SMI800Cgsm模块发送中文短信.使用STM32发送短信敬请等待... #include "config.h" #include "str ...

  4. android短信发送乱码,解决CEMAPI发送中文短信时会乱码

    作者:陈缘 联系:luandao2000@gmail.com 博客:http://blog.csdn.net/luandao2000 主页:http://www.spbase.com 这个问题 所有用 ...

  5. 基于STM32与GSM模块发送中英文短信

    基于STM32与GSM模块发送中英文短信 最近在做毕业设计有用到GSM模块进行短信报警,模块的功能比较多这里就不介绍了,一般的拨打电话都很简单就只需要一条指令即可,发送英文短信也很简单也只要几条命令也 ...

  6. STM32使用GSM模块发送中英文短信(TEXT模式到PDU模式的转换)

    STM32使用GSM模块发送中英文短信(TEXT模式到PDU模式的转换) 目的是按下按键,短信发送 PDU转换网站 链接: PDU转换网站. 使用硬件: ··· 开发板:正点原子战舰V3 GSM模块: ...

  7. java usc2短信编码_手机短信PDU编码与解码

    编码代码: / ///文 件:PDUdecoding.cs ///程 序 员:klude ///编制日期:2007-11-04 ///概 要:针对国内短信编码(USC2) ///组成结构:包含四个函数 ...

  8. 使用AT指令发送PDU短信的全过程

    本文以一个实例来解说AT指令发送PDU短信的全过程,假如我要发送下面的短信: 接收号码:+8615215029639 短信内容:工作愉快! 短信中心号码:+8613800230500 一.短信中心号码 ...

  9. 通过PC发送手机短信

    手机短信发送²        中文转换成Unicode码函数 因为手机短消息的发送是以PDU串的形式发送出去的,中文字符以Unicode码来表示,所以在发送中文短消息之前必须首先将中文字符转换为Uni ...

最新文章

  1. 学编程必看:逻辑思维测试
  2. tensorflow saver_TensorFlow: Model Persistence
  3. 计算机与操作系统简介
  4. 盘点:2019年最赚钱的10种编程语言
  5. Longest Palindrome CodeForces - 1304B(思维)
  6. 判断浏览器版本语句大全
  7. pandas后台导出excel_pandas导出Excel表格,银行卡号、身份证号无法正常显示的问题,该怎么解决?...
  8. day06【后台】两套分配
  9. FSO对象新建、打开、保存文件
  10. Dijkstra算法——最短路径(转)
  11. 在Linux系统下更改或更新SSH密钥密码的方法
  12. mysql:分组中某字段最大值的查询结果
  13. Android内存优化
  14. 片袖原型制图_袖原型一片袖打版干货
  15. 组合数学(2)——组合矩阵
  16. com.mysql.jdbc.driver jar下载_com.mysql.jdbc.Driver
  17. 【面试题】数字转成汉字形式
  18. [MySQL远程备份策略举例]
  19. 计算机备份应用程序无法启动,由于内部错误,备份应用程序无法启动如何解决-解决“由于内部错误,备份应用程序无法启动”的方法 - 河东软件园...
  20. 两轮自平衡车系统的模型构建

热门文章

  1. 中国移动5G消息开发者社区第10期5G消息云课堂 | 直播回放已上线
  2. 关于nwjs中捕获应用崩溃信息的记录
  3. 谷歌Chrome、火狐FireFox 支持WebGL的设置
  4. iphone ios HTTP Live Streaming
  5. linux系统4gb够用吗,专家:手机仅需要4GB运存就够用
  6. JAVA代码求解最大子段和问题
  7. Ecos model
  8. Just Using Your Imagination.Come On!
  9. Python机器学习基础之Python的基本语法(一)
  10. 后端开发基础能力以及就Java的主流开发框架介绍