Utf 8 长生不老药

Utf 8 长生不老药,utf-8,elixir,iconv,Utf 8,Elixir,Iconv,我下载了一个CSV文件并用以下代码保存: body = HTTPoison.get!(url).body |> String.replace("ü", "ü") |> String.replace("ö", "ö") File.write!("/tmp/example.csv", body) 执行字符串.replace/3将ü替换为ü当然不是一个好方法。HTTPoison告诉我主体是{“Content-Type”,“csv;charset=ut

我下载了一个CSV文件并用以下代码保存:

body = HTTPoison.get!(url).body 
       |> String.replace("ü", "ü") 
       |> String.replace("ö", "ö")
File.write!("/tmp/example.csv", body)
执行
字符串.replace/3
ü
替换为
ü
当然不是一个好方法。HTTPoison告诉我主体是
{“Content-Type”,“csv;charset=utf-8”}


如果没有
字符串,我如何解决这个问题。替换/3

这里的数据首先是UTF-8编码的,然后字节被视为拉丁1编码并再次编码为UTF-8

该URL中数据的十六进制转储代码段显示:

00007d20: 2c22 222c 2c2c 224f 7269 6769 6e3a 2044  ,"",,,"Origin: D
00007d30: c383 c2bc 7373 656c 646f 7266 222c 224b  ....sseldorf","K
00007d40: 6579 776f 7264 733a 204c 6173 7420 4d69  eywords: Last Mi
ü
编码为
,可能是这样创建的:

iex(1)> "ü\0"
<<195, 188, 0>>
iex(2)> <<195::utf8, 188::utf8>> == <<0xc3, 0x83, 0xc2, 0xbc>>
true

该URL的开头还包含一个BOM表:

00000000: efbb bf22 5a75 7069 6422 2c22 5072 6f67  ..."Zupid","Prog
          ^^^^ ^^
00000010: 7261 6d49 6422 2c22 4d65 7263 6861 6e74  ramId","Merchant
00000020: 5072 6f64 7563 744e 756d 6265 7222 2c22  ProductNumber","
可以在
:unicode.characters_to_list
之后使用
|>Enum.drop(1)
删除此项

因此,以下内容应该对您有用:

HTTPoison.get!(url).body
|> :unicode.characters_to_list
|> Enum.drop(1)
|> :erlang.list_to_binary

你有没有试过(从来没有试过,但它的自述文件说它是“100%纯长生不老药中的iconv”,听起来像你正在寻找的)?有没有可能共享URL?
HTTPoison.get!(url).body
|> :unicode.characters_to_list
|> Enum.drop(1)
|> :erlang.list_to_binary