搜索
aardio官方社区 门户 查看主题

SendMessageW发送消息,中文出现乱码

发布者: 261041951 | 发布时间: 2018-4-1 00:13| 查看数: 163| 评论数: 6|帖子模式

代码如下,msg传入数字,字符都正常,传入汉字,接收端就是乱码了

  1. msg = "123你好"
  2. ::User32.SendMessage(wxHwnd,74/*WM_COPYDATA*/,25220,{
  3. INT typeNub;
  4. INT strLen=string.len(msg);
  5. STR strBody=msg
  6. })
  7. //收到消息为: 123浣
复制代码

最新评论

Jacen.He 发表于 2018-4-1 02:25:46
看 win.sendCopyData 的源码
261041951 发表于 2018-4-1 03:42:38
Jacen.He 发表于 2018-4-1 02:25
看 win.sendCopyData 的源码

刚看了,参考了代码,可中文还是乱码
不知道是不是编码问题,我还是在学习调用外部dll中,真头大啊!劳烦你再指点指点,谢谢
Jacen.He 发表于 2018-4-1 12:54:00
261041951 发表于 2018-4-1 03:42
刚看了,参考了代码,可中文还是乱码
不知道是不是编码问题,我还是在学习调用外部dll中,真头大啊!劳 ...

你几个地方写错了,str是UTF8,
一般外部程序不是unicode就是ansi,窗口程序直接用UTF8编码的很少。

第二个地方你的长度写错了,长度是字节长度,不应该用 string.len取字符长度。

你在aardio中可以正常发送,你也可以用 string.fromto转换成任意的编码。
怎么写都不会不有乱码,自己再耐心找找原因。
Jacen.He 发表于 2018-4-1 12:55:30
基础知识花点时间了解一下,尤其是编码转换、结构体这一块,不然肯定是每天会头大的
261041951 发表于 2018-4-1 13:30:41
Jacen.He 发表于 2018-4-1 12:55
基础知识花点时间了解一下,尤其是编码转换、结构体这一块,不然肯定是每天会头大的

好的!真是奇怪了,昨晚用了各种转码行不通,今天在试试,居然没有乱码了!
谢谢,您的指点和建议
  1. msg="你好"
  2. msg=string.fromto(msg,0,936)
复制代码
261041951 发表于 2018-4-1 13:42:18
  1. function sendText(wxHwnd,msg){                //发送文本
  2.     msg=string.fromto(msg,0,936)        
  3.         ::User32.SendMessageA(wxHwnd,74/*WM_COPYDATA*/,0,{
  4.                 INT typeNub;
  5.                 INT strLen=#msg;
  6.                 pointerstrBody=msg
  7.         })        
  8. }
复制代码
主要错误,在于
INT strLen=#msg;
这句取字节长度,我写成
INT string.len(msg);
导致接收乱码,应该就是编码时取字节长度出错了


谢谢,校长的知识点和提示,记录一下,以便今后查看

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-4-22 11:05 , Processed in 0.062503 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表