收藏
回答

企业微信会话内容存档调用DecryptData返回中文出现乱码

问题类型 API/组件名称 终端类型 微信版本 基础库版本
Bug 企业微信会话存档sdk 工具

我用c#开发会话存档功能,调用官方c的dll,使用解密方法DecryptData返回msg,再调用GetContentFromSlice(msg)出现部分中文乱码。

双数中文字的时候不会乱码,例:“您好”。单数中文字的时候最后一个字是乱码,例:“麻烦提供下截�?”,(原文:麻烦提供下截图)。

而且乱码的那条数据最后的双引号也没有返回,导致不能正常转成json格式,如下图:

之前开发了个java的版本,一切正常可以返回正常的中文数据。

同一条会话数据,用java中运行出来的encrypt_key、encrypt_msg和c#运行出来的encrypt_key、encrypt_msg一致,但是c#调用解密方法后就会出现前面说的情况。

是c#调用dll里的方法有什么前提需求吗?

最后一次编辑于  2020-07-30
回答关注问题邀请回答
收藏

7 个回答

  • 企业微信运营专员-千夜
    企业微信运营专员-千夜
    2020-07-30

    您好,麻烦提供下使用的是否是java 版本sdk,以及是win还是linux环境, jdk版本

    2020-07-30
    有用
    回复 8
    • Lurv ⁺¹
      Lurv ⁺¹
      2020-07-30
      c和java的sdk都调用尝试了,结果一样。
      win环境
      c#编码。不是java
      2020-07-30
      回复
    • FM.2413
      FM.2413
      2020-08-07
      我的也是乱码,用提供的C++ demo也是乱码
      2020-08-07
      回复
    • FM.2413
      FM.2413
      2020-08-07回复FM.2413
      2020-08-07
      回复
    • 企业微信运营专员-千夜
      企业微信运营专员-千夜
      2020-08-07回复FM.2413
      还需要提供下以下信息
      会话存档问题描述:
      Corpid:
      相关代码返回:
      调用接口:
      调用时间点:
      调用是传入的参数
      2020-08-07
      回复
    • Lurv ⁺¹
      Lurv ⁺¹
      2020-08-10回复企业微信运营专员-千夜
      请问一下会话存档有发布到Azure webapp上的案例吗,webapp上我导入所需dll运行后出现 “An attempt was made to load a program with an incorrect format”,这个有方法解决吗?
      2020-08-10
      回复
    查看更多(3)
  • changeme
    changeme
    2021-10-19

    java -jar -Dfile.encoding=utf-8 wechat-work-agent-0.0.1-SNAPSHOT.jar

    spring boot 项目, 运行时指定编码即可

    2021-10-19
    有用 4
    回复 2
    • 弘羊
      弘羊
      2022-06-23
      这个解决方案靠谱,大家顶上去
      2022-06-23
      回复
    • Minzlee
      Minzlee
      2022-11-10
      靠谱
      2022-11-10
      回复
  • 大白兔
    大白兔
    2022-02-12

    windows平台下java代码不正常,返回中文是奇数时GBK数据乱码? 动态库方法GetContentFromSlice的返回值能不能改成utf8或者ISO-8859-1的

    2022-02-12
    有用
    回复
  • 东方之猪
    东方之猪
    2020-11-23

    楼主能把c# rsa解密的关键代码贴出来吗,我试了下一直10008.。。。。不知什么问题,qq:1056657216, 跪求老铁指导啊

    2020-11-23
    有用
    回复
  • Yohao🥤
    Yohao🥤
    2020-09-25

    我用私钥解密encrypt_random_key 后得到的key,去调用 DecryptData 这个接口,在C++和java 都会出现乱码,我在怀疑是不是 encrypt_random_key 解密的key有问题,导致这样。

    2020-09-25
    有用
    回复
  • FM.2413
    FM.2413
    2020-08-07

    我的也是乱码,用提供的C++ demo也是乱码

    2020-08-07
    有用
    回复 4
    • Lurv ⁺¹
      Lurv ⁺¹
      2020-08-10
      你也用的.net开发吗?我这边是单数中文最后一个字乱码,而且缺少最后的一个双引号不能转json。
      接的时候要用IntPtr接返回值,然后转成string类型的就可以了。
      2020-08-10
      回复
    • 星驰天下
      星驰天下
      2020-09-12回复Lurv ⁺¹
      同样问题啊,单数奇数汉字乱码,请问你解决了吗?
      2020-09-12
      回复
    • Lurv ⁺¹
      Lurv ⁺¹
      2021-05-13回复星驰天下
      抱歉很久没上了,调用GetSliceLen可以获取指定长度,在截取就好了
      2021-05-13
      回复
    • 边境
      边境
      2021-05-27
      GetSliceLen 方法是什么,IntPtr 转string 有个Marshal.PtrToStringAnsi(msgData) 长度也不知道
      2021-05-27
      回复
  • way1 on load (^_^)
    way1 on load (^_^)
    2020-07-30

    感觉肯定是C#中的编码问题了,我用java版本也是正常的

    2020-07-30
    有用
    回复 2
    • Lurv ⁺¹
      Lurv ⁺¹
      2020-07-30
      java的sdk和c的DecryptData方法参数不一样,我用c#调java的DecryptData方法时出现了你提问中的10008,请问这个错误码是因为啥?
      2020-07-30
      回复
    • 东方之猪
      东方之猪
      2020-11-23回复Lurv ⁺¹
      我也一直10008,你解决了哇
      2020-11-23
      回复
登录 后发表内容
问题标签