From 8afbabd7fc02c4abb26807151804c60e7de427c5 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Fri, 26 May 2023 18:12:02 +0800 Subject: [PATCH] fix: bad pp unicode map keys --- src/hocon_pp.erl | 11 +++++++---- test/hocon_pp_tests.erl | 9 +++++++-- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/hocon_pp.erl b/src/hocon_pp.erl index 45fafb7..d695501 100644 --- a/src/hocon_pp.erl +++ b/src/hocon_pp.erl @@ -152,10 +152,13 @@ gen_map_field(K, V, Opts, NL) -> %% maybe quote key maybe_quote(K) when is_atom(K) -> atom_to_list(K); -maybe_quote(K) -> - case re:run(K, "[^A-Za-z_]") of - nomatch -> K; - _ -> io_lib:format("~0p", [unicode:characters_to_list(K, utf8)]) +maybe_quote(K0) -> + case re:run(K0, "[^A-Za-z_]") of + nomatch -> + K0; + _ -> + K1 = unicode:characters_to_list(K0, utf8), + <<"\"", (format_escape_sequences(K1))/binary, "\"">> end. bin(IoData) -> diff --git a/test/hocon_pp_tests.erl b/test/hocon_pp_tests.erl index 63f80ea..924d698 100644 --- a/test/hocon_pp_tests.erl +++ b/test/hocon_pp_tests.erl @@ -152,5 +152,10 @@ utf8_test() -> ?assertThrow({invalid_utf8, _}, hocon_pp:do(InvalidUtf8, #{})), Utf8 = #{<<"test">> => <<"测试-专用"/utf8>>}, PP = hocon_pp:do(Utf8, #{}), - {ok, Conf2} = hocon:binary(PP), - ?assertEqual(Utf8, Conf2). + {ok, Conf} = hocon:binary(PP), + ?assertEqual(Utf8, Conf), + %% support utf8 key + Utf81 = #{<<"测试-test-专用"/utf8>> => <<"测试-专用"/utf8>>}, + PP1 = hocon_pp:do(Utf81, #{}), + {ok, Conf1} = hocon:binary(PP1), + ?assertEqual(Utf81, Conf1).