我用wget从网上读网页。但有时我会得到get二进制流,而不是纯文本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页面源?
谢谢。
发布于 2022-07-31 22:39:23
判断我得到的数据是二进制还是纯文本的最好方法是什么?
也许最普遍的答案可能是转到Raku模块资料来源::TextOrB进制,它可以用来确定某些数据可能是文本还是二进制;这是一种启发式方法。
确定HTTP响应性质的最佳方法是查看Content-type头。与其调用wget,不如尝试各种Raku模块之一,这些模块可以与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!";如果我试图将数据与字母或数字(文本)匹配,我只需得到“格式错误的UTF-8”。
默认情况下,run假定这就是它将得到的结果。您还可以将:bin参数传递给run,以获得Blob (任何二进制数据),而不是让它自动解码。但是,如果不是文本数据,您仍然需要决定该做什么。
https://stackoverflow.com/questions/73181912
复制相似问题