我有两个Javascript字符串,当传递到console.log时,会从console.log提供完全相同的输出,但是当我通过HTTP POST将它们传递给使用SpringMVC的基于Java Jetty的REST API时,Jackson JSON解析库会抛出一个错误并使服务器返回第二个但不是第一个的状态代码。
这两个字符串都是使用浏览器中的textAngular工具生成的,当点击切换html /富文本按钮编辑html时,两个字符串之间的唯一区别是在被textAngular清理之前,其中一个包含一个“& nbsp;”在html中,另一个包含一个常规空格“”:
<p>Howdy </p>
VS
<p>Howdy </p>
其中第二个是失败的那个。但是传递到服务器之前的每个字符串都由textAngular清理,因此输出看起来相同。来自console.log的字符串输出的两个已清理版本都是:
<p>Howdy </p>
因此它们应该被视为相同:要么都抛出错误要么两者都通过。
console.log是否对实际的字符串变量进行了自己的清理?或者是否有一个不同的字符编码用于两个字符串中的空格字符,console.log自动从?
转换更新 我尝试在字符串上使用以下内容:
console.log(html.charCodeAt(8))
第一个字符串返回32,第二个字符串返回160,因此它们的二进制表示实际上是不同的。我想我可以编写自己的清洁剂,将这个特定的空间编码转换为另一个,但是我担心可能会有其他边缘情况,例如不同的字符。我想知道是否有更好的解决方案强制整个字符串进入正确的字符编码。
答案 0 :(得分:0)
我的解决方案是在提交帖子之前添加自己的清理功能:
html.replace('\xa0', ' ');
其中&#39; \ xa0&#39;是160(非中断空格)的十六进制编码。这似乎满足了服务器的JSON解析器;虽然我有兴趣看看textAngular的消毒剂是否存在相关的字符编码问题,以及可能更全面的解决方案。