You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TestNG校验SOAP响应时预期字符串连字符被替换为乱码问题

问题原因

你代码里写的那个看着像连字符的字符,根本不是普通ASCII半角减号/连字符-,是Unicode短破折号–(编码U+2013)。出现乱码的核心原因是编码不匹配:

  • 你的Java源文件保存编码和编译时指定的编码不一致,这个占2个字节的短破折号被错误解析,变成了Unicode替换字符▒(U+FFFD,就是你看到的乱码块)
  • SOAP服务实际返回的是编码正确的短破折号,两边字符串比对自然不通过,TestNG输出的预期值里就显示成了乱码。
修复方法

二选一即可,优先选第一种,一劳永逸不会踩编码坑:

  • 方法1:不要在代码里硬写这个特殊破折号,直接用Unicode转义序列代替。把<faultstring>和<ns2:LogMessage>两处的–全部替换成\u2013,不管源文件用什么编码保存,Java编译后都能正确识别这个字符,不会出现乱码。
    对应修改后的代码片段:
    "<faultstring>Request Rejected \u2013 Old and New Adjuster Code are same on claim.</faultstring>\n" +
    "<ns2:LogMessage>Request Rejected \u2013 Old and New Adjuster Code are same on claim.</ns2:LogMessage>\n" +
    
  • 方法2:统一全链路编码。把所有Java源文件保存为UTF-8格式,同时给构建工具配置明确指定编译编码为UTF-8。Maven项目就在pom.xml里加如下配置:
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    
    如果是直接在IDE里跑测试,把IDE的全局编码、项目编码、配置文件编码全部改成UTF-8,避免编译读文件时解析错字符。
排查建议

以后遇到这种肉眼看着一样但比对不通过的情况,直接把两边对应位置的字符转成Unicode码值打印出来对比,不要靠肉眼分辨,很多长得像的特殊字符(比如全角破折号、半角减号、长破折号、短破折号)视觉上几乎没区别,码值差得很远。

内容的提问来源于stack exchange,提问作者danilo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 02:18:19