扩展ASCII字符经SOAP UI请求体传递后转为问号问题求助
我之前也碰到过一模一样的编码坑,扩展ASCII字符(比如£、ß)在SOAP UI请求体里被转成问号,本质就是字符编码不匹配在搞鬼——SOAP UI默认可能用了仅支持0-127字符的ASCII编码,而扩展ASCII属于128-255区间,超出范围的字符直接被替换成了默认占位符?(十六进制对应3F)。结合你用Wireshark/Netmon抓包的结果,给你几个落地的解决步骤:
强制指定请求的字符编码
打开SOAP UI请求的「Headers」标签,添加或修改Content-Type字段为text/xml; charset=utf-8(如果业务需要,也可以用原生支持扩展ASCII的ISO-8859-1)。明确编码后,请求体里的特殊字符会按指定编码传输,不会被粗暴替换。调整SOAP UI全局编码设置
进入File > Preferences(偏好设置),找到编辑器相关选项,把默认编码改成UTF-8或者ISO-8859-1。这样你编辑请求体时,字符就会以正确编码保存,避免一开始就被转码。同步服务端的编码配置
光客户端设置不够,服务端也要跟上对应的编码规则。比如Java后端可以在web.xml里配置字符编码过滤器:<filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>其他语言的服务端也要做类似配置,确保接收请求时用正确编码解析。
抓包验证效果
修改完配置后,重新发送包含password£的请求,再用Wireshark看十六进制:如果是UTF-8编码,£对应的十六进制应该是C2 A3;如果是ISO-8859-1则是A3,而不是之前的3F(问号),这就说明问题解决了。
内容的提问来源于stack exchange,提问作者JavaTechie

