Я попытался следующий код в IEX:Elixir неверная строка
iex(13)> String.valid?(<<128>>)
false
iex(14)> String.valid?(<<191>>)
false
Почему не оба действительные строки?
Я попытался следующий код в IEX:Elixir неверная строка
iex(13)> String.valid?(<<128>>)
false
iex(14)> String.valid?(<<191>>)
false
Почему не оба действительные строки?
Как сказал Рамон Снайр, вам необходимо использовать utf8
. Из руководства по началу работы:
Строка представляет собой кодированную в кодировке UTF-8 двоичную. Чтобы точно понять, что мы подразумеваем под этим, нам нужно понять разницу между байтами и кодовыми точками.
...
При представлении кодовых точек в байтах, нам нужно закодировать их как-то. Эликсир выбрал кодировку UTF-8 в качестве основного и стандартного кодирования. Когда мы говорим, что строка является кодировкой с кодировкой UTF-8, мы подразумеваем, что строка представляет собой кучу байтов, организованных таким образом, чтобы представлять определенные кодовые точки, как определено кодировкой UTF-8.
<<128 :: utf8>> |> String.valid? # => true
Вы можете прочитать по адресу: Binaries, strings and char lists
В руководстве говорится, что «UTF-8 является основным и стандартным кодированием». IO.puts (<<65>>) возвращает A: ok, но IO.puts (<<128>>) возвращает ошибку ... почему? – jaysoifer
Пробовали ли вы 'String.valid (<<128::utf8>>)' вместо этого? '<<128::utf8>>' дает вам двоичный код, состоящий из одного кода utf8 «128»: '<<194, 128>>' –