1、修改 rfc4627.erl:
1) encode_string(Str, "\"" ++ Acc)
-----> encode_string(iconv:convert("GB2312","UTF-8",Str), "\"" ++ Acc)
2) [hex_digit((X) band 16#F),
hex_digit((X bsr 4) band 16#F),
hex_digit((X bsr 8) band 16#F),
hex_digit((X bsr 12) band 16#F),
$u,
$\\ | Acc].
-----> % [hex_digit((X) band 16#F),
% hex_digit((X bsr 4) band 16#F),
% hex_digit((X bsr 8) band 16#F),
% hex_digit((X bsr 12) band 16#F),
% $u,
% $\\ | Acc].
[X | Acc].
3) case catch parse(skipws(Chars)) of
-----> case catch parse(iconv:convert("UTF-8","GB2312",skipws(Chars))) of
4) parse_general_char($", Rest, Acc) -> parse_string(Rest, [$" | Acc]);
parse_general_char($u, [D0, D1, D2, D3 | Rest], Acc) ->
parse_string(Rest, [(digit_hex(D0) bsl 12) +
(digit_hex(D1) bsl 8) +
(digit_hex(D2) bsl 4) +
(digit_hex(D3)) | Acc]).
-----> parse_general_char($", Rest, Acc) -> parse_string(Rest, [$" | Acc]).
%parse_general_char($u, [D0, D1, D2, D3 | Rest], Acc) ->
% parse_string(Rest, [(digit_hex(D0) bsl 12) +
% (digit_hex(D1) bsl 8) +
% (digit_hex(D2) bsl 4) +
% (digit_hex(D3)) | Acc]).
2、修改 json.js:
1) default:
c = c.charCodeAt();
s += '\\u00' + Math.floor(c / 16).toString(16) +
(c % 16).toString(16);
------>default:
/*c = c.charCodeAt();
s += '\\u00' + Math.floor(c / 16).toString(16) +
(c % 16).toString(16);*/
s += c;
2) case 'u':
u = 0;
for (i = 0; i < 4; i += 1) {
t = parseInt(next(), 16);
if (!isFinite(t)) {
break outer;
}
u = u * 16 + t;
}
s += String.fromCharCode(u);
break;
-----> /*case 'u':
u = 0;
for (i = 0; i < 4; i += 1) {
t = parseInt(next(), 16);
if (!isFinite(t)) {
break outer;
}
u = u * 16 + t;
}
s += String.fromCharCode(u);
break;*/