【症状】どのような症状、現象か?
JSONエンコードの際、文字列に含まれる、改行やTABや「"」や「\」のエスケープが行なわれない。
【再現方法】サンプルソース、再現手順など
------
「ab"cd\e」をJSONエンコードして表示。
------
今は、
"ab"cd\e"
と表示される。このままJSONデコードすると、失敗します。正しくエスケープすると、以下。
"ab\"cd\\e"
【要望】どのような解決が望ましいか?
正しくエスケープを行い、JSONエンコードとJSONデコードを繰り返せばデータが戻るようにしてほしい。
【バージョン】1.5333
【その他】
よく見ると、unit_kabin.pasに謎なコーディングが・・・
--------
if (p.VType = varStr) then
begin
s := hi_str(p);
s := JReplace(s, '\', '\\');
s := JReplace(s, #9, '\t');
s := JReplace(s, #13, '\r');
s := JReplace(s, #10, '\n');
s := JReplace(s, #0, '\0');
Result := '"' + hi_str(p) + '"';
Exit;
end;
------------
エスケープする振りして、最後にsではなくpから再取得しています。
また、もともと「"」に対するエスケープがすっぱり抜けているようです。こんな感じでしょうか。エスケープと各型を網羅したテストユニットが合ったほうがよいかもしれません。
------------
if (p.VType = varStr) then
begin
s := hi_str(p);
s := JReplace(s, '\', '\\');
s := JReplace(s, '"', '\"');
s := JReplace(s, #8, '\b');
s := JReplace(s, #12, '\f');
s := JReplace(s, #9, '\t');
s := JReplace(s, #13, '\r');
s := JReplace(s, #10, '\n');
s := JReplace(s, #0, '\u0000');
Result := '"' + s + '"';
Exit;
end;
------------