为什么Elixir在分割后无法打印Unicode字符串?

时间:2016-06-26 03:41:55

标签: unicode elixir

这有效:"ы д" |> IO.puts

但这不是:"ы д" |> String.split(~r/[^а-я]+/) |> hd |> IO.puts

** (ArgumentError) argument error
    (stdlib) :io.put_chars(#PID<0.26.0>, :unicode, [<<209>>, 10])

为什么?

1 个答案:

答案 0 :(得分:3)

Elixir中的正则表达式默认不是基于Unicode的代码点。您需要传递u modifier以启用Unicode代码点上的匹配:

iex(1)> "ы д" |> String.split(~r/[^а-я]+/u)
["ы", "д"]
iex(2)> "ы д" |> String.split(~r/[^а-я]+/u) |> hd
"ы"

如果没有u,则返回值不是UTF-8:

iex(1)> "ы д" |> String.split(~r/[^а-я]+/)
[<<209>>, "д"]