anchor.diff:      case B of
           <<_:O/binary, ?Q, _/binary>> ->
               O;
  -        <<_:O/binary, C, _/binary>> when C =/= $\\ ->
  +        <<_:O/binary, $\\, _/binary>> ->
  +            {escape, O};
  +        <<_:O/binary, C1, _/binary>> when C1 < 128 ->
               tokenize_string_fast(B, 1 + O);
  -        _ ->
  -            {escape, O}
  +        <<_:O/binary, C1, C2, _/binary>> when C1 >= 194, C1 =< 223,
  +                C2 >= 128, C2 =< 191 ->
  +            tokenize_string_fast(B, 2 + O);
  +        <<_:O/binary, C1, C2, C3, _/binary>> when C1 >= 224, C1 =< 239,
  +                C2 >= 128, C2 =< 191,
  +                C3 >= 128, C3 =< 191 ->
  +            tokenize_string_fast(B, 3 + O);
  +        <<_:O/binary, C1, C2, C3, C4, _/binary>> when C1 >= 240, C1 =< 244,
  +                C2 >= 128, C2 =< 191,
  +                C3 >= 128, C3 =< 191,
  +                C4 >= 128, C4 =< 191 ->
  +            tokenize_string_fast(B, 4 + O);
  +        _ ->
  +            throw(invalid_utf8)
       end.
   
   tokenize_string(B, S=#decoder{offset=O}, Acc) ->
  
positive.code:     Enc = mochijson2:encoder([{utf8, true}]),
      [34,"\\u0001",[209,130],[208,181],[209,129],[209,130],34] =
          Enc(<<1,"\321\202\320\265\321\201\321\202">>).
  
negative.code:     [1199344435545.0, 1] = decode(<<"[1199344435545.0,1]">>),
      <<16#F0,16#9D,16#9C,16#95>> = decode([34,"\\ud835","\\udf15",34]),
      test_encoder_utf8(),
      test_input_validation(),
      test_one(e2j_test_vec(utf8), 1).
  
  test_one([], _N) ->
  