使rfc4627-1.0.3支持双字节文字

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;*/ 

你可能感兴趣的:(C++,c,REST,C#,F#)