gpt4 book ai didi

elixir - 检查 elixir 中字符串的有效性

转载 作者:行者123 更新时间:2023-12-04 00:35:59 25 4
gpt4 key购买 nike

为什么以下不是有效的二进制字符串?

String.valid?(<<239, 191, 191>>)
false

最佳答案

UTF-8中的字节239, 191, 191解码为Unicode代码点U+FFFF:

iex(1)> <<x::utf8>> = <<239, 191, 191>>
<<239, 191, 191>>
iex(2)> x
65535
iex(3)> x == 0xFFFF
true

这是一个Unicode Non-CharacterString.valid?/1 has a list of all such characters并在遇到其中任何一个时返回 false


我在 Elixir 中找不到任何只检查 UTF-8 有效性并跳过非字符检查的函数,但写一个函数很简单:

defmodule A do
def valid_utf8?(<<_::utf8, rest::binary>>), do: valid_utf8?(rest)
def valid_utf8?(<<>>), do: true
def valid_utf8?(_), do: false
end

for binary <- [<<0>>, <<239, 191, 191>>, <<128>>] do
IO.inspect {binary, String.valid?(binary), A.valid_utf8?(binary)}
end

输出:

{<<0>>, true, true}
{<<239, 191, 191>>, false, true}
{<<128>>, false, false}

关于elixir - 检查 elixir 中字符串的有效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42513699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com