COM口接受字符编码转换

Yothan 2014-10-27 03:55:30
有一台短信发送说明书,可以手法短信,其中短信的发送我已经都写完了,现在在写接受短信的部分。
使用超级中断调试,说明文档是这样描述接受短信的协议的:
AT+WSCL=6,4 -->设置短信为中文,Unicode编码
OK
Note: Set language to Chinese, encoding
to UNICODE

AT+CMGS=”8585551212”<CR>-->发送短信到手机,手机号经过算法处理
Ãû×Ö<ctrl-Z> -->发送内容,这里是看起来是乱码,不知道经过什么样的处理产生的。
Note : Send a message in Chinese
+CMGS: <mr>
OK
Note : Message sent

说明文档中说是Unicode编码,但是我接受时不管怎么转换都是显示的乱码,有人知道如何把Ãû×Ö显示为中文吗?
解决问题之后分数可再加100!
...全文
357 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yothan 2015-06-23
  • 打赏
  • 举报
回复
引用 7 楼 jankercsdn 的回复:
COM口传输的是字节流,不关编码的,编解码是你自己的事,你试试不通过COM传输,也就是发送的字符在内存中转成字节流,然后再转回来,能正确解码否? 再监控看看,COM接收到的字节数据有否丢失,你用MSCOM,可能丢失字节数据 换个控件,比如cport或spcomm试试
我试过了,字节没有丢失,确实是转码的问题,发出和接受的byte数组内容是相同的,问题是能力有限,不知道怎么按照发出的编码方式再解回来!
看那山瞧那水 2015-06-19
  • 打赏
  • 举报
回复
COM口传输的是字节流,不关编码的,编解码是你自己的事,你试试不通过COM传输,也就是发送的字符在内存中转成字节流,然后再转回来,能正确解码否? 再监控看看,COM接收到的字节数据有否丢失,你用MSCOM,可能丢失字节数据 换个控件,比如cport或spcomm试试
Yothan 2015-06-18
  • 打赏
  • 举报
回复
这是接受短信编码问题,发送短信的编码已经解决,现在贴上发送短信的解码,因为半桶水的关系,虽然代码出来了,但还不能了解代码的含义,希望高手看到之后能否帮忙解释一下? function UnicodeEncodes(s: widestring) : string; var WS: WideString; WC: WideChar; Code: Word; i: Integer; begin if (s = #0) or (s = '') then begin Result := '0'; Exit; end; WS := s; Result := ''; for i := 1 to Length(WS) do begin WC := WS[i]; Move(WC, Code, SizeOf(WC)); Result := Result + IntToStr(code); end; end; function TForm1.DXConvertUnicode(const ChineseStr: WideString): arrByte; var i, k, bNo, code, kk: LongInt; strTotal, strtep: arrByte; n, n1,str: string; begin k := Length(ChineseStr); SetLength(strTotal, k*2); strTotal[0] := 00; bNo := 0; For i := 1 To k do begin n1 := Copy(ChineseStr, i, 1); n := UnicodeEncodes(n1); code := StrToInt('$' + n); kk := Code div 256; strTotal[bNo] := kk; strTotal[bNo + 1] := Code And 255; bNo := bNo + 2; end; Result := strTotal; end;
Yothan 2015-06-18
  • 打赏
  • 举报
回复
引用 4 楼 gykthh 的回复:
好像com口是UTF-8的base64 加密的 方式 你可以试试
14年的帖子,当时这个功能没做了,现在又要继续,还是未翻译出来!
Blessed_Chuan 2014-10-29
  • 打赏
  • 举报
回复
好像com口是UTF-8的base64 加密的 方式 你可以试试
Yothan 2014-10-29
  • 打赏
  • 举报
回复
不好意思,不知道具体怎么弄呢?
wylton 2014-10-28
  • 打赏
  • 举报
回复
一般对发送的文本加密再以bit8 位发送, 接收端先解密.
Yothan 2014-10-27
  • 打赏
  • 举报
回复
接受是通过MSComm控件接受。不管使用widestring还是string,都一样是乱码

16,746

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧