首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理从web读取的二进制流

问处理从web读取的二进制流
EN

Stack Overflow用户
提问于 2022-07-31 09:01:22
回答 1查看 106关注 0票数 7

我用wget从网上读网页。但有时我会得到get二进制流,而不是纯文本html文件。判断我得到的数据是二进制还是纯文本的最好方法是什么?如果我试图将数据与字母或数字(文本)匹配,我只需得到“格式错误的UTF-8”。

代码语言:javascript
复制
my $result = run << wget -k -q -O $aPage "$aURL" >>, :err; 

我需要知道$result是二进制(gzip)还是纯文本。

代码语言:javascript
复制
if $result ~~ / <:L + :N> / { } # this will fail with "Malformed UTF-8" if $result is a binary stream

*是否有一个Raku包从任何url获取纯文本html页面源?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-31 22:39:23

判断我得到的数据是二进制还是纯文本的最好方法是什么?

也许最普遍的答案可能是转到Raku模块资料来源::TextOrB进制,它可以用来确定某些数据可能是文本还是二进制;这是一种启发式方法。

确定HTTP响应性质的最佳方法是查看Content-type头。与其调用wget,不如尝试各种Raku模块之一,这些模块可以与zef包管理器一起安装。例如,您可以使用Cro::HTTP::Client

代码语言:javascript
复制
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 (任何二进制数据),而不是让它自动解码。但是,如果不是文本数据,您仍然需要决定该做什么。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73181912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档