将 UTF-16LE Elixir 位串转换为 Elixir 字符串

use*_*847 4 utf-8 utf-16 elixir utf-16le

给定一个以 UTF-16LE 编码的 Elixir 位串:

<<68, 0, 101, 0, 118, 0, 97, 0, 115, 0, 116, 0, 97, 0, 116, 0, 111, 0, 114, 0, 0, 0>>
Run Code Online (Sandbox Code Playgroud)

我怎样才能把它转换成一个可读的 Elixir 字符串(它拼出“毁灭者”)?我得到的最接近的是将上面的内容转换为 Unicode 代码点列表 ( ["0044", "0065", ...]) 并尝试将\u转义序列添加到它们之前,但 Elixir 抛出一个错误,因为它是一个无效序列。我没有想法了。

mic*_*ala 7

最简单的方法是使用:unicode模块中的函数:

:unicode.characters_to_binary(utf16binary, {:utf16, :little})
Run Code Online (Sandbox Code Playgroud)

例如

<<68, 0, 101, 0, 118, 0, 97, 0, 115, 0, 116, 0, 97, 0, 116, 0, 111, 0, 114, 0, 0, 0>>
|> :unicode.characters_to_binary({:utf16, :little})
|> IO.puts
#=> Devastator
Run Code Online (Sandbox Code Playgroud)

(最后有一个空字节,因此在 shell 中将使用二进制显示而不是字符串,并且根据操作系统,它可能会为空字节打印一些额外的表示)