受注サイトの開発者です。Tomcat/Java
バックエンドがありJavaScript
、ブラウザーで広く使用されています。私のプログラムは、注文を正常に行うために内部システムが必要とする大量のデータ セットに関するユーザーとの会話を管理します。私たちの会話はすべてHTTPS
プロトコルを使用しています。
少し前までは、フォーム データ (Struts
アプリケーション) を受け取り、それを処理して、再びフォームとして返していました。いくつかのデータ損失エラーに気付きました。の拡張子を使用すると、特定のユーザーがフォーム データを欠落HttpServletRequestWrapper
していることがわかりました。あちこちにラインアイテムがあり、かなり悲惨です。私たちのデータは単一でなければなりません。
そのため、最近のリビジョンでは、フォームはJSON
. フォーム データを文字列に変換し、そこから CRC サムを作成し、これらの両方をキャリアJSON
オブジェクトにラップします。反対側は、フォーム データ文字列を抽出し、同じCRC
変換を適用してから、2 つの値を比較します。すべて順調ですが...
私の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"
どこ "?" は、黒いひし形で表示される文字の 1 つです。内部的には複数文字の Unicode です。
CRC
私が両端で使用しているのは主に( AnDan CRC software
CRC-16 実装だと思います) です。古いダウンロード ページがいくつかあるだけで、適切なリンクを取得できません :-( .
処理を通じて Unicode と高ビット文字を処理できるようにするスイッチまたは構成があるかどうか疑問に思っていますCRC
。何か案は?