我是接收短信网关的内容,接收后显示为乱码,是因为UNICODE的原因吗?怎么办?

jas_liu 2003-06-19 10:38:50
struct MO_msg{
INT64 msgID; //消息ID
char dest_id[21]; //接入号码
char service_id[10]; //业务代码
unsigned char tp_pid;
unsigned char tp_udhi;
unsigned char msgFormat; //消息格式
char sourceUser[12]; //发送消息的手机
unsigned char reg_deliver; //是否为应答消息,1=yes,0=no
unsigned char msgLen; //消息长度
// UCS4String msg[161]; //消息内容
wchar_t msg[161]; //消息内容
}
MO_msg *p_msg = NULL;
p_msg = new MO_msg;

stat=Get_MO(Connectid, p_msg); //接收短信

char gb[161];
WideCharToMultiByte(CP_ACP,0,p_msg->msg,-1,gb,161,NULL,NULL);

ShowMessage(gb);
ShowMessage(p_msg->msg);

显示结果都为: 杔橭?樠愠?3

为什么?
...全文
118 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdllove 2003-06-20
  • 打赏
  • 举报
回复
判断一下网关下发的短信编码有的是0有的是8好像是我忘了你自己查查,
如果是8就得转一下!
if (Sgip_Del.MessageCoding==8)
{
String messagecontent,charadd;
char messagecontent2[160],charmessage[160],destbuf[160];
int lenth;
lenth=Sgip_Del.Length ;
memset(messagecontent2,0,lenth);
memcpy(messagecontent2,Sgip_Del.Msg_Content,lenth);
for (int i=1;i<=lenth;i++)
{
charadd=messagecontent2[i-1];
charmessage[i-1]=charadd[1];
}
for (int i=0;i<lenth;i=i+2)
{
char temp;
temp=charmessage[i];
charmessage[i]=charmessage[i+1];
charmessage[i+1]=temp;
}
WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK|WC_DISCARDNS|WC_SEPCHARS|WC_DEFAULTCHAR,
(wchar_t *)(charmessage), -1, destbuf, 160, NULL, NULL);
messagecontent=destbuf;
messagecontent=messagecontent.SubString(1,lenth);
FlySky01 2003-06-20
  • 打赏
  • 举报
回复
wchar_t msg[161];


你是怎给它值的呢?
NowCan 2003-06-20
  • 打赏
  • 举报
回复
楼上的这位,你有没有注意到楼主的短信内容buffer是wchar_t型的。这和短信协议不符。
yuanhen 2003-06-19
  • 打赏
  • 举报
回复

ShowMessage(gb);
ShowMessage(p_msg->msg);

两个结果都一样吗? 不会吧!

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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