url_decode64二进制序列化为字符串

时间:2015-08-30 01:27:30

标签: elixir

我目前正在尝试从Youtube评论中解码一些base64 CDATA。它似乎将它解码为二进制文件,但不确定如何将其转换为字符串。

<?xml version="1.0" encoding="utf-8"?><root><comments><![CDATA[EAEYACCQTg==]]></comments></root>

在灵药中

iex> Base.url_decode64!("EAEYACCQTg==")    
<<16, 1, 24, 0, 32, 144, 78>>

如果我试着把它扔进一个utf8字符串,它就不匹配了。

iex> <<x::utf8>> = Base.url_decode64!("EAEYACCQTg==")
** (MatchError) no match of right hand side value: <<16, 1, 24, 0, 32, 144, 78>>

2 个答案:

答案 0 :(得分:1)

您的匹配模式是针对单个utf-8字符,而不是字符串,但是对于任意长度的utf-8字符串没有匹配模式,您可以使用该模式逐字符地逐字符解析结果二进制一个utf-8字符串。

答案 1 :(得分:1)

我认为您使用的编码值是问题:

iex(1)> Base.url_decode64!("EAEYACCQTg==") |> String.valid?
false
iex(2)> <<104, 101, 197, 130, 197, 130, 111>> |> String.valid?
true
iex(3)> IO.puts "The string is #{<<104, 101, 197, 130, 197, 130, 111>>}"
The string is hełło
:ok

如果解码后的字符串有效,您可以获得一个开箱即用的字符串作为返回值:

iex(4)> Base.encode64("foobar")
"Zm9vYmFy"
iex(5)> Base.url_decode64!("Zm9vYmFy")
"foobar"