【问题标题】:Erlang Terms to Unicode StringErlang 术语到 Unicode 字符串
【发布时间】:2018-05-07 06:47:07
【问题描述】:

我有一个元组列表,由某个函数生成,如下所示:

[{"a","ą"}, {"ą","a"}, {"a","o"}, {"o","e"}]

但是当我打印它时,我在终端中看到:

[{"a",[261]}, {[261],"a"}, {"a","o"}, {"o","e"}]

我通常用这个命令打印它:

io:format("~p~n", [functionThatGeneratesListOfTuples()]),

目前我发现在打印Unicode字符串时需要使用~ts,所以我尝试了这个:

Pairs = functionThatGeneratesListOfTuples(), PairsStr = io_lib:format("~p", [Pairs]), io:format("~ts~n", [PairsStr]),

是否有可能实现 Unicode 字符串被适当地表示?

【问题讨论】:

    标签: string unicode printing erlang


    【解决方案1】:

    默认情况下,将整数列表检测为字符串的启发式仅识别 Latin-1 字符,因此 [65,66,67] 打印为 "ABC"[665,666,667] 打印为 "[665,666,667]",即使您使用 ~tp .您必须将 Erlang 启动为 erl +pc unicode 以使其接受高于 255 的可打印 unicode 代码点。在该模式下,[665,666,667] 打印为 "ʙʚʛ"~tp(但不是 ~p)。

    请参阅http://erlang.org/doc/man/io.html#printable_range-0 了解更多信息,以及最近对文档的改进,将包含在 OTP 21 中:https://github.com/erlang/otp/pull/1737/files

    【讨论】:

    • 现在io:format("~ts~n", ["aąaoeugvbjsniubjgsb"]), 打印a\x{105}aoeugvbjsniubjgsb。成对是这样的{"a","\x{105}"}, {"\x{105}","a"},
    • 这可能是您的区域设置和/或终端设置的问题。您应该有类似 LANG=en_US.UTF-8 的内容,并且终端中的编码应该是 UTF-8。
    猜你喜欢
    • 2012-03-14
    • 1970-01-01
    • 2017-06-09
    • 2013-02-14
    • 2017-11-19
    • 1970-01-01
    • 2018-11-17
    • 2021-11-09
    • 1970-01-01
    相关资源
    最近更新 更多