我目前正在尝试从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>>
答案 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"