为什么长生不老药可以';拆分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-а]+/)
[, "д"]