为什么在通过charlists重新创建字符串时会得到不同的字符串

时间:2015-03-14 10:24:28

标签: elixir

iex(1)> 'hełło'         
[104, 101, 322, 322, 111]
iex(2)>  <<104, 101, 322, 322, 111>>
"heBBo"

不应该<<104, 101, 322, 322, 111>>返回“hełło”,因为它使用相同的代码点吗?

1 个答案:

答案 0 :(得分:4)

我现在明白了,当值为255的时候,需要告诉bitstring如何对值进行编码。以下打印字符串正确。

 <<104, 101, 322::utf8, 322::utf8, 111>> #=> "hełło"

编辑1:要添加更多有关我为什么会这样做的细节&#34; heBBo&#34;,了解值的截断是如​​何工作的很重要。一个字节可以存储最大值256.如果给出一个值,例如322,那么存储的内容实际上是322-256,即66,它是&#39; B&#39;的代码点。

因此我的<<104, 101, 322, 322, 111>>条目被截断为&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; 104,106