2016-02-14 4 views
4

Я попытался следующий код в IEX:Elixir неверная строка

iex(13)> String.valid?(<<128>>) 
false 
iex(14)> String.valid?(<<191>>) 
false 

Почему не оба действительные строки?

+2

Пробовали ли вы 'String.valid (<<128::utf8>>)' вместо этого? '<<128::utf8>>' дает вам двоичный код, состоящий из одного кода utf8 «128»: '<<194, 128>>' –

ответ

2

Как сказал Рамон Снайр, вам необходимо использовать utf8. Из руководства по началу работы:

Строка представляет собой кодированную в кодировке UTF-8 двоичную. Чтобы точно понять, что мы подразумеваем под этим, нам нужно понять разницу между байтами и кодовыми точками.

...

При представлении кодовых точек в байтах, нам нужно закодировать их как-то. Эликсир выбрал кодировку UTF-8 в качестве основного и стандартного кодирования. Когда мы говорим, что строка является кодировкой с кодировкой UTF-8, мы подразумеваем, что строка представляет собой кучу байтов, организованных таким образом, чтобы представлять определенные кодовые точки, как определено кодировкой UTF-8.

<<128 :: utf8>> |> String.valid? # => true 

Вы можете прочитать по адресу: Binaries, strings and char lists

+0

В руководстве говорится, что «UTF-8 является основным и стандартным кодированием». IO.puts (<<65>>) возвращает A: ok, но IO.puts (<<128>>) возвращает ошибку ... почему? – jaysoifer

Смежные вопросы