arrays - 为什么使用 reqwest 下载的 PNG 图像的字节数与使用 Python 下载的字节数不同?
问题描述
我正在尝试使用 reqwest 库来下载 PNG 文件,但是当我下载它时,我看到一个奇怪的行为尊重其他编程语言,例如:Python。
例如:
let content = reqwest::get("https://www.google.es/images/searchbox/desktop_searchbox_sprites302_hr.png").await?;
如果我将结果打印为字节数组(println!("{:?}", content.text().await?.as_bytes()
);
[ 191, 189, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 40, 0, 0, 0, 82, 8, 3, 0, 0, 0, 17, 191, 189, 102, 191, 189, 0, 0, 0, 108, 80, 76, 84, 69, 0, 0, 0, 191, 189, 191, 189, 191, 189,...]
但是,使用 Python 请求的结果是:
[137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 40, 0, 0, 0, 82, 8, 3, 0, 0, 0, 17, 153, 102, 248, ...]
在 Rust 版本中,我看到了很多191, 189
. 这个序列在整个数组中重复了很多次,但在 Python 中根本不会出现。
我在 Rust 中做错了什么?
解决方案
我看到很多
191, 189
最好将其视为EF, BF, BD
,这是编码为UTF-8的Unicode 替换字符。二进制数据不是文本数据。您不应该使用二进制数据,而是使用.text
bytes
const URL: &str = "https://www.google.es/images/searchbox/desktop_searchbox_sprites302_hr.png";
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let content = reqwest::get(URL).await?;
let bytes = content.bytes().await?;
println!("{:x?}", &bytes[..]);
Ok(())
}
[89, 50, 4e, 47, d, a, 1a, a, 0, 0, 0, d, 49, 48, 44, 52, 0, 0, 0, 28, 0, 0, 0, 52, 8, 3, 0, 0, 0, 11, 99, 66, f8, 0, 0, 0, 6c, 50, 4c, 54, 45, 0, 0, 0, 9f, ...
推荐阅读
- plpgsql - 在 postgresql 中将表名作为参数传递
- c++ - 优雅地访问嵌套类中的数据
- mysql - MySQL Order By with If 条件减慢查询速度
- mysql - 如何使用两个 WHERE 条件从两个表中进行选择?
- mysql - 由于约束失败,无法添加或更新子行。父行有数据
- ios - 在 IOS 13.2 MFMailComposeViewController 中没有出现发送和取消按钮
- android - 如何在底部导航活动中制作自动图像滑块?
- arrays - 重建阵列的速度效率
- c++ - CDialog标题/标题的字体样式
- graphviz - boosted树的值是什么意思?