当请求包含货币符号(在本例中为“£”)时,我在请求的响应中遇到了XML中断。
我已经做了相当多的测试,并将其缩小到在XML中使用“of”,这在某种程度上会导致不完整的结束标记,这当然会导致无法解析的XML,例如:
<?xml version='1.0' encoding='UTF-8'?>
<partial-response>
<changes>
<update id="productForm">
<![CDATA[
<form enctype="application/x-www-form-urlencoded">
<div>
<span>
<span id="productForm:price">£10.00</span>
</span>
</div>
</form>]]>
</update>
</changes>
</partial-response这是由于partial-response结束标记损坏(而不是错误)造成的,在dev控制台中确认了这一点:

£的存在是由调试和测试确定的原因。
以下是我能做出的一些断言:
£符号,此时它是BAU。
- `<f:convertNumber type="currency" locale="en_GB" currencyCode="GBP"/>`
- `<f:convertNumber type="currency" locale="en_GB" currencySymbol="£"/>` All of these fail.
- `<f:convertNumber type="currency" locale="en_GB" pattern="0.00"/>` does not, but obviously because it doesn't end up with a `£`
<p>£</p>也使其成为bork.。
我看不出有什么明显的原因会导致这种情况--我也无法确定这是应用服务器还是应用程序配置问题。它已经在*NIX环境上进行了测试,在这方面没有任何证据表明它是环境的。
这里有什么明显的遗漏吗?我所看到的所有编码都被设置为UTF-8,所以我对此感到困惑,并且通过搜索找不到其他类似的情况。
谢谢你提前提出建议
发布于 2020-04-08 14:47:53
经过进一步的调查,发现这是(未确定的) @WebFilter的结果。
web过滤器实现拦截输出字符串中的某些值,尽管实际上没有更改请求的内容,特别是在调试器中,但这似乎会给响应带来更多的问题。
web过滤器中代码的问题区域是:
servletResponse.setContentLength( filteredContent.length() );我没有编写这个类,并怀疑它可能是“模板代码”,但是这个属性的重新设置所导致的问题似乎远远多于它所解决的问题。移除它解决了问题。servlet似乎能够自己处理这个属性(至少等待更多的测试)。
https://stackoverflow.com/questions/61100210
复制相似问题