1

我是一个接单网站的开发人员。它有一个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 和高位字符。有任何想法吗?

4

0 回答 0