我使用 wget 从网络上读取页面。但有时我会得到 gzipped 二进制流而不是纯文本 html 文件。确定我获得的数据是二进制还是纯文本的最佳方法是什么?如果我尝试将数据与字母或数字(文本)匹配,我只会得到“格式错误的 UTF-8”。
my $result = run << wget -k -q -O $aPage "$aURL" >>, :err;
我需要知道 $result 是二进制(gzip)还是纯文本。
if $result ~~ / <:L + :N> / { } # this will fail with "Malformed UTF-8" if $result is a binary stream
是否有 Raku 包可以从任何 url 获取纯文本 html 页面源?
确定我获得的数据是二进制还是纯文本的最佳方法是什么?
也许最普遍的答案可能是转向 Raku 模块Data::TextOrBinary,它可用于确定某些数据是否可能是文本或二进制;这是一种启发式方法。
确定 HTTP 响应性质的最佳方法是查看
Content-type
标头。不要调用 wget
,而是尝试各种 Raku HTTP 模块之一,该模块可以使用 zef
包管理器安装。例如,您可以使用 Cro::HTTP::Client
:
use Cro::HTTP::Client;
my $response = await $aURL;
say "Content is " ~ $response.content-type;
my $body = await $response.body;
say $body ~~ Blob ?? "It's binary!" !! "It's not binary!";
如果我尝试将数据与字母或数字(文本)进行匹配,我只会得到“Malformed UTF-8”。
默认情况下
run
假设这就是它将得到的。您还可以将 :bin
参数传递给 run
,以获得 Blob
(任何二进制数据),而不是让它自动解码。但是,如果不是文本数据,您仍然需要决定该怎么做。