我在StackOverflow上阅读了几篇文章,但它们似乎都不适用于我的情况,所以情况就是这样。
我有一个不受我控制的网页。它包含一个在标记中引用的图像,如<img src="getimage.asp?pic=4c54aae0ea..." />
。鉴于该图像的URL,我想下载它,将其保存到磁盘并使用它做一些事情。
当我直接在浏览器中输入URL时,我得到一个二进制流。这是第一批角色。
ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„ÿÄ¢ }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #
如何使用例如将数据转换为图像C#或任何其他语言。由于我不控制页面,我不知道数据是如何编码的 - 所以我还能解码吗?
从前几个字符可以看出,字符串“LEAD Technologies Inc.”包含在数据中,所以我猜它不是所有的图像数据。但至少,Chrome显然知道如何解码它。快速谷歌检查显示“LEAD技术”是一个成像SDK,但他们的网站似乎没有提供有关它的使用的很多信息,我也不精通图像处理。任何想法都将不胜感激。
答案 0 :(得分:2)
前几个字符表示响应可能是解释为ASCII文本的jpeg文件。我想HTTP响应中的Content-Type
标头有错误的值,可能类似text/plain
或text/html
而不是image\jpeg
。这使Chrome可以将图像显示为纯文本。
我认为你不必转换数据。只需将响应流保存到文件中,您就会拥有一个合适的jpeg文件:
string url = "http://my-domain/getimage.asp?pic=4c54aae0ea...";
string fileLocation = @"C:\MyImage.jpg";
var client = new WebClient();
client.DownloadFile(url, fileLocation);
我认为响应可能是jpeg的原因是jpeg文件以0xFFD8FFE0
开头,当显示为ÿØÿà
编码文本时看起来像ISO 8859-1
。