金蝶 s-HR Cloud webservice接口异常:SAXParseException:字符引用 "&"
问题描述:
单点登录调用OSF接口:使用webservice方式调用接口返回:{ "error": "Call OSF error: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 4450419; 字符引用 "�"}
环境信息:
数据库:oracle库 数据库字符编码集:varchar(AL32UTF-8) nvarchar(AL16UTF-16);此两种编码集可正常显示生僻字。
问题原因:
webservice接口通过SOAP(Simple Object Access Protocol)传输方式进行数据传输。
SOAP是一种基于XML的通信协议,它定义了在Web服务之间进行信息交换的规范。SOAP消息是以XML格式进行封装的,消息头包含有关消息的元数据,消息体包含实际的数据。在Java中,你可以使用JAX-WS(Java API for XML Web Services)来创建和访问SOAP Web服务。JAX-WS提供了用于生成和解析SOAP消息的API,可以轻松地创建SOAP客户端和服务端。
1.由于基于XML格式传输 :生僻字字符没有正确的通过Unicode码表示。
在 XML 中,实际上,�
是一个十六进制的字符引用(Character Reference),表示 Unicode 编码中的一个字符。具体来说,�
对应的 Unicode 编码是 U+D844。
然而,根据我的知识库中的信息(截止到2021年9月),Unicode 编码 U+D844 并没有对应的字符,也就是说,它不代表任何生僻字或其他字符。在 Unicode 中,并不是每个编码都有对应的字符,有些编码留空或者为未定义的编码。
因此,�
并不代表任何生僻字,而是一个无效的字符引用。如果你遇到了类似的字符引用,很可能是由于数据或文本中出现了错误的编码导致的。在处理字符引用时,应确保使用正确的编码来表示相应的字符。
。请注意,如果只有高位代理而没有低位代理,或者只有低位代理而没有高位代理,都是不合法的代理对,会导致 XML 解析错误。
2.可以在oracle中通过sql查找哪些数据包含生僻字:
SELECT * FROM your_table WHERE your_column LIKE '%' || UNISTR('\D861\DEAC') || '%'; UNISTR('\D861\DEAC') 表示 Unicode 转义序列,可根据异常抛出的unicode字符模糊查询 或者通过httpClient方式拿到osf数据: 在数据中搜索�。这个符号标识字符无效引用
问题结论:webservice不支持无效引用的生僻字(某些生僻字)的数据传输,若需要传输生僻字,请使用httpclient接口,或者修改生僻字
金蝶 s-HR Cloud webservice接口异常:SAXParseException:字符引用 "&"
本文2024-09-17 00:51:38发表“s-hr cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-shr-63707.html