为什么长生不老药可以';拆分Unicode字符串后是否打印它?

为什么长生不老药可以';拆分Unicode字符串后是否打印它?,unicode,elixir,Unicode,Elixir,这项工作:“||>IO.puts ** (ArgumentError) argument error (stdlib) :io.put_chars(#PID<0.26.0>, :unicode, [<<209>>, 10]) 但这不是:字符串.split(~r/[^а-а]+/)\hd>IO.puts ** (ArgumentError) argument error (stdlib) :io.put_chars(#PID<0.26.0

这项工作:
“||>IO.puts

** (ArgumentError) argument error
    (stdlib) :io.put_chars(#PID<0.26.0>, :unicode, [<<209>>, 10])
但这不是:
字符串.split(~r/[^а-а]+/)\hd>IO.puts

** (ArgumentError) argument error
    (stdlib) :io.put_chars(#PID<0.26.0>, :unicode, [<<209>>, 10])
**(ArgumentError)参数错误
(stdlib):io.put_字符(#PID,:unicode,[,10])

为什么?

Elixir中的正则表达式默认情况下不是基于Unicode码点的。要在Unicode码点上启用匹配,您需要通过:

iex(1)> "ы д" |> String.split(~r/[^а-я]+/u)
["ы", "д"]
iex(2)> "ы д" |> String.split(~r/[^а-я]+/u) |> hd
"ы"
如果没有
u
,则返回值不是UTF-8:

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