我在这里有图片网址: https://spi-ra.jp/wp-content/uploads/2019/09/あRP27988_1012.jpg
然后我将其编码为: https://spi-ra.jp/wp-content/uploads/2019/09/%E3%81%82RP27988_1012.jpg
我尝试了Kingfisher,SDWebImage和URLSession来下载它,但是都失败了。我不知道为什么 这是我的代码:
URLSession.shared.dataTask(with: URL(string: "https://spi-ra.jp/wp-content/uploads/2019/09/%E3%81%82RP27988_1012.jpg")!) {[weak self] (data, response, error) in
print(data) // 76606 bytes
DispatchQueue.main.async {
self?.imageView.image = UIImage(data: data!) // nil
}
}.resume()
任何人都可以给我一些建议吗?谢谢
答案 0 :(得分:1)
让我们进行一些调试
#!/bin/bash
find . -name '*.xyz' -exec shasum {} + |
# Reverse each line, sort by first field, reverse again
# Entries for files with the same basename will now be adjacent
rev | sort -t / -k1,1 | rev |
awk -F / '$NF!=p { p=$NF; delete a; c=""; }
{ split($0, x, /[ \t]+/);
if(x[2] ~ /^\.\/1\//) {
if (a[x[1]]) print a[x[1]];
c = x[1];
next
}
if (c) {
if (x[1] == c) print x[2];
next;
}
a[x[1]] = x[2] (a[x[1]] ? ORS a[x[1]] : ""); }'
此打印
URLSession.shared.dataTask(with: URL(string: "https://spi-ra.jp/wp-content/uploads/2019/09/%E3%81%82RP27988_1012.jpg")!) { (data, response, error) in
guard let response = response else {
print("No response")
return
}
print("Response:\n\(response)")
guard let data = data else {
print("No data")
return
}
print("data.count: \(data.count)")
//Is image valid/interpreted as such?
let image = UIImage(data: data)
print(image ?? "no image")
//Get first 100 bytes because all of it isn't necessary
let subData = Data(data.prefix(100))
//Convert it into "hex string"
let hexString = subData.reduce("", { $0 + String(format: "%02x", $1) })
print("HexString: \(hexString)")
}.resume()
JPEG图像应以“ FFD8”开头,而不是“ 5249”。
调试附加组件:使用 Safari.app 打开链接不会显示图片,但是使用 Chrome.app 打开它即可。
查看the documentation of WebP之后进行了一些搜索,因为我记得WebP是一种“ Google格式”(解释了为什么它在Chrome上有效,但在Safari上无效)。
Response:
<NSHTTPURLResponse: 0x60000269a460> { URL: https://spi-ra.jp/wp-content/uploads/2019/09/%E3%81%82RP27988_1012.jpg } { Status Code: 200, Headers {
"Accept-Ranges" = (
bytes
);
"Content-Length" = (
76606
);
"Content-Type" = (
"image/jpeg"
);
...
} }
data.count: 76606
no image
HexString: 52494646362b010057454250565038202a2b0100b002049d012a1c031c023e6d3093472422a1a529571b68a00d8945bd76d35a3d9576f28c75a36dd6cdfe8bc8d375a3dfe23abbba7231d4dedcd9b5f7da446bf2ef8ff1d0ff3771ff33ff9bcd77ddfbe6
礼物:
let riffData = "RIFF".data(using: .ascii)
let webpData = "WEBP".data(using: .ascii)
print("riffData: \(riffData?.reduce("", { $0 + String(format: "%02x", $1) }))")
print("webpData: \(webpData?.reduce("", { $0 + String(format: "%02x", $1) }))")
我们看到了相同的开始,稍后再找到webpData(检查文档/标题长度)。
因此,这是一个WebP图像,iOS并未本地翻译该图像。您必须使用自己拥有的第三方库或代码来显示该图像。
根据您的评论,有一个KingfisherWebp可以做到。