我想将一些带有重音字符的城市名称转换为普通字符串。例如:
<<"Sosúa">> to <<"Sosua">> <<"Luperón">> to <<"Luperon">>
有什么线索吗?
siv3szwd1#
1.应用Unicode Canonical Decomposition (NFD)重写两个代码点o(U+6 F)中的字符,如ó,后跟一个分隔的组合锐音符(U+301)和unicode:characters_to_nfc_binary/11.使用regexp \p{Mn}替换(re:replace/4)所有组合音调符号(非空格标记),如上面的U+3011.可选项:应用Unicode规范组合(NFC)将剩余的和可能的代码点重新组合在一起
\p{Mn}
String = "Luperón", {ok, Re} = re:compile("\\p{Mn}", [unicode]), Output = unicode:characters_to_nfc_binary( re:replace( unicode:characters_to_nfd_binary(String), Re, "", [global] ) ), Output.
与Elixir等效,用于参考和信息(因为它也基于Erlang的unicode模块):
string = "Luperón" output = Regex.replace(~R<\p{Mn}>u, string |> :unicode.characters_to_nfd_binary(), "") |> :unicode.characters_to_nfc_binary()
1条答案
按热度按时间siv3szwd1#
1.应用Unicode Canonical Decomposition (NFD)重写两个代码点o(U+6 F)中的字符,如ó,后跟一个分隔的组合锐音符(U+301)和unicode:characters_to_nfc_binary/1
1.使用regexp
\p{Mn}
替换(re:replace/4)所有组合音调符号(非空格标记),如上面的U+3011.可选项:应用Unicode规范组合(NFC)将剩余的和可能的代码点重新组合在一起
与Elixir等效,用于参考和信息(因为它也基于Erlang的unicode模块):