String 读取非utf-8编码的字符表
假设我们从外部源获得一个String 读取非utf-8编码的字符表,string,encoding,character-encoding,elixir,String,Encoding,Character Encoding,Elixir,假设我们从外部源获得一个字符列表,它基本上表示一些传统的1字节编码中的字符串,如ISO-8859-2。有一个软件包可以简化不同编码之间的转换,但它的函数需要一个[二进制文件]作为输入 所有标准库函数在转换为utf8时均采用Latin1akaISO-8859-1输入编码(如to_string,IO.chardata_to_string,“{code>等) 我想到的是: input |> to_string |> Codepagex.from_string!(:iso_8859_
字符列表
,它基本上表示一些传统的1字节编码中的字符串,如ISO-8859-2
。有一个软件包可以简化不同编码之间的转换,但它的函数需要一个[二进制文件
]作为输入
所有标准库函数在转换为utf8
时均采用Latin1
akaISO-8859-1
输入编码(如to_string
,IO.chardata_to_string
,“{code>等)
我想到的是:
input
|> to_string
|> Codepagex.from_string!(:iso_8859_1)
|> Codepagex.to_string!(:iso_8859_2) # target encoding
这有点难看
在已知的编码中,是否有任何健壮且方便的内置/惯用的elixir方法可以从charlist
中提取字符串?在elixir中的整数列表中,to_string
将整数视为Unicode码点(to_string[960]#=>“π”
),而您希望将每个整数视为一个字节。在Erlang中,这可以通过使用list\u to\u binary
来完成。我在Elixir的内置模块中找不到任何用于此的包装器,但您始终可以调用:erlang.list\u to\u 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)
"ŕ"
iex(1)>[224]|>:erlang.list_到_二进制文件
iex(2)>检查([224]|>到_字符串),二进制文件::作为_二进制文件
""
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)
"ŕ"
这样更好吗:input |>:erlang.list_to_binary |>Codepagex.to_string!(:iso_8859_2)
?似乎工作正常:[224]|>:erlang.list_to_binary|>Codepagex.to_string!(:iso_8859_2)#=>“ŕ”
@Dogbert是的,这肯定更清楚,因为它不涉及可疑和多余的to_string |>Codepagex.from_string!(:iso_8859_1)
转换,是的,它工作正常。请贴出答案。