Browse Source

マルチバイト文字とascii文字が混在している場合にデコードが失敗していたのを修正

Takeru Ohta 11 years ago
parent
commit
3f1e356733
2 changed files with 7 additions and 2 deletions
  1. 1 1
      src/jsone_decode.erl
  2. 6 1
      test/jsone_decode_tests.erl

+ 1 - 1
src/jsone_decode.erl

@@ -147,7 +147,7 @@ string(<<$\\, B/binary>>, Base, Start, Nexts, Buf) ->
         <<$n, Bin/binary>> -> string(Bin, Start, Nexts, <<Buf/binary, Prefix/binary, $\n>>);
         <<$r, Bin/binary>> -> string(Bin, Start, Nexts, <<Buf/binary, Prefix/binary, $\r>>);
         <<$t, Bin/binary>> -> string(Bin, Start, Nexts, <<Buf/binary, Prefix/binary, $\t>>);
-        <<$u, Bin/binary>> -> unicode_string(Bin, Start, Nexts, Buf);
+        <<$u, Bin/binary>> -> unicode_string(Bin, Start, Nexts, <<Buf/binary, Prefix/binary>>);
         _                  -> ?ERROR(string, [<<$\\, B/binary>>, Base, Start, Nexts, Buf])
     end;
 string(<<C, Bin/binary>>, Base, Start, Nexts, Buf) when 16#20 =< C ->

+ 6 - 1
test/jsone_decode_tests.erl

@@ -101,7 +101,12 @@ decode_test_() ->
               %% 日本語以外のマルチバイト文字
               Input3    = <<"\"\\u06DD\\u06DE\\u10AE\\u10AF\"">>,
               Expected3 = <<"۝۞ႮႯ">>,
-              ?assertEqual({ok, Expected3, <<"">>}, jsone_decode:decode(Input3))
+              ?assertEqual({ok, Expected3, <<"">>}, jsone_decode:decode(Input3)),
+
+              %% 日本語と英数字が混在
+              Input4    = <<"\"a\\u30421\\u3044bb\\u304622\\u3048ccc\\u304A333\"">>,
+              Expected4 = <<"aあ1いbbう22えcccお333">>,  % このファイルの文字エンコーディングがUTF-8であることが前提
+              ?assertEqual({ok, Expected4, <<"">>}, jsone_decode:decode(Input4))
       end},
      {"サロゲートペアを含む文字列がデコード可能",
       fun () ->