我是一个接单网站的开发人员。它有一个Tomcat/Java
后端并JavaScript
在浏览器上广泛使用。我的程序管理与我们的用户的对话,内容涉及我们内部系统成功下订单所需的大量数据。我们所有的对话都使用该HTTPS
协议。
不久前,我们曾经接受我们的表单数据(一个Struts
应用程序),对其进行处理并再次将其作为表单返回。我注意到一些数据丢失错误。使用 的扩展HttpServletRequestWrapper
,我可以看到某些用户缺少表单数据。到处都是订单项,非常令人痛苦。我们的数据应该是单一的。
因此,在最近的一次修订中,表单正在通过 Ajax 对话来回传输,使用JSON
. 我们将表单数据转换为字符串,从中创建一个 CRC 和,然后将这两者包装到一个载体JSON
对象中。另一方将提取表单数据字符串,应用相同的CRC
转换,然后比较两个值。一切都很好,但是...
我发现我的CRC
生成取决于数据字符串是否包含“高位”字符——默认情况下你从程序中得到的东西Microsoft Word
,比如句子周围的那些花哨的双引号、外语元音等等。似乎底层的传输机制破坏了一些东西。
例如,如果我传回预格式化的 HTML,则正斜杠如
</b>
在过程中转化为
<\/b>
这不校验和相同。我可以检查额外的反斜杠,但我对传输机制任意重新格式化文本感到沮丧。
再举一个例子,我JSON
在服务器上有一些数据:
"alt_bill_contact":"ACCT PAY Rocío",
(注意单词中“i”的花哨版本。)
它直接写入响应 ( HttpServletResponse.getWriter().write(JSON output string)
)。下次我可以看到它在
ServerRequest.ajaxRequest = $.ajax({
type : 'POST',
url : ServerRequest.serverUrl,
data : sendJSON,
dataType : 'json',
timeout: 200000,
async : async,
cache : false,
error: function(XMLHttpRequest, textStatus, errorThrown) {
if(ServerRequest.ajaxRequest != null) {
ServerRequest.ajaxErrorResponseHandler(XMLHttpRequest, textStatus, errorThrown);
}
ServerRequest.ajaxRequest = null;
},
success : function(response) {
if(ServerRequest.ajaxRequest != null) {
ServerRequest.ajaxSuccessResponseHandler(response);
}
ServerRequest.ajaxRequest = null;
}
});
[snip]
var something = ServerRequest.ajaxRequest.responseText;
“某物”有:
"alt_bill_contact":"ACCT PAY Roc?o"
在哪里 ”?” 是显示为黑色钻石的字符之一。在内部,它是一个多字符 Unicode。
CRC
我在每一端使用的主要是(AnDan CRC software
我认为它是一个 CRC-16 实现)。我找不到一个好的链接,只有一些旧的下载页面:-(。
我想知道是否有一个开关或配置可以让我通过CRC
处理来处理我的 Unicode 和高位字符。有任何想法吗?