Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 读取非utf-8编码的字符表_String_Encoding_Character Encoding_Elixir - Fatal编程技术网

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
aka
ISO-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)
转换,是的,它工作正常。请贴出答案。