假设我们从外部源获取 charlist
,它基本上代表一些传统的1字节编码中的字符串,如ISO-8859-2
。有一个CodepageX
包,可以简化不同编码之间的转换,但是to_string
函数需要[binary
]作为输入。
转换为Latin1
时,所有标准库函数都假设ISO-8859-1
又称utf8
输入编码(如to_string
,IO.chardata_to_string
,"#{}"
等。)
我想出的是:
input
|> to_string
|> Codepagex.from_string!(:iso_8859_1)
|> Codepagex.to_string!(:iso_8859_2) # target encoding
这有点难看。
是否有任何强大且方便的内置/惯用的灵丹妙药以已知编码方式从 string
中获取 charlist
? / p>
答案 0 :(得分:1)
to_string
将整数视为Unicode代码点(to_string [960] #=> "π"
),而您希望将每个整数视为一个字节。在Erlang中,可以使用list_to_binary
完成此操作。我在Elixir的内置模块中找不到任何包装器,但你可以随时拨打:erlang.list_to_binary
:
iex(1)> [224] |> :erlang.list_to_binary
<<224>>
iex(2)> inspect ([224] |> to_string), binaries: :as_binaries
"<<195, 160>>"
iex(3)> [224] |> :erlang.list_to_binary |> Codepagex.to_string!(:iso_8859_1)
"à"
iex(4)> [224] |> :erlang.list_to_binary |> Codepagex.to_string!(:iso_8859_2)
"ŕ"