我在iex中尝试了以下代码:
iex(13)> String.valid?(<<128>>)
false
iex(14)> String.valid?(<<191>>)
false
为什么这两个都不是有效字符串?
答案 0 :(得分:2)
像Ramon Snir所说,你需要使用utf8
。从入门指南:
字符串是UTF-8编码的二进制文件。为了准确理解我们的意思,我们需要理解字节和代码点之间的区别。
...
当以字节表示代码点时,我们需要以某种方式对它们进行编码。 Elixir选择UTF-8编码作为其主要和默认编码。当我们说一个字符串是UTF-8编码的二进制文件时,我们的意思是字符串是一组字节,以表示某些代码点的方式组织,如UTF-8编码所指定的那样。
<<128 :: utf8>> |> String.valid? # => true
您可以在以下网址了解详情:Binaries, strings and char lists