C# 编码问题?

C# 编码问题?,c#,encoding,C#,Encoding,我想从网络上获取一张图片,并将其转换为字节数组。但是阅读回答时有点不对劲。我怀疑这是由编码模式引起的 WebRequest request = WebRequest.Create("http://www.waterfootprint.org/images/gallery/original/apple.jpg"); request.Method = "GET"; request.Timeout = 10000; using (WebR

我想从网络上获取一张图片,并将其转换为字节数组。但是阅读回答时有点不对劲。我怀疑这是由编码模式引起的

        WebRequest request = WebRequest.Create("http://www.waterfootprint.org/images/gallery/original/apple.jpg");
        request.Method = "GET";
        request.Timeout = 10000;
        using (WebResponse response = request.GetResponse())
        {
            Stream stream = response.GetResponseStream();
            Encoding encoding = Encoding.UTF8;
            StreamReader streamReader = new StreamReader(stream, encoding);

            string responseBody = streamReader.ReadToEnd(); //always invalid characters here
            streamReader.Close();
            stream.Dispose();
            byte[] buffer = Convert.FromBase64String(responseBody); 
        }
我尝试过其他编码方式,如UTF7、Unicode等,但都是徒劳的。有人能告诉我为什么吗?谢谢

        WebRequest request = WebRequest.Create("http://www.waterfootprint.org/images/gallery/original/apple.jpg");
        request.Method = "GET";
        request.Timeout = 10000;
        using (WebResponse response = request.GetResponse())
        {
            Stream stream = response.GetResponseStream();
            Encoding encoding = Encoding.UTF8;
            StreamReader streamReader = new StreamReader(stream, encoding);

            string responseBody = streamReader.ReadToEnd(); //always invalid characters here
            streamReader.Close();
            stream.Dispose();
            byte[] buffer = Convert.FromBase64String(responseBody); 
        }
    StreamReader streamReader = new StreamReader(stream, encoding);
是一种文本阅读器,它以特定编码从字节流中读取字符

        WebRequest request = WebRequest.Create("http://www.waterfootprint.org/images/gallery/original/apple.jpg");
        request.Method = "GET";
        request.Timeout = 10000;
        using (WebResponse response = request.GetResponse())
        {
            Stream stream = response.GetResponseStream();
            Encoding encoding = Encoding.UTF8;
            StreamReader streamReader = new StreamReader(stream, encoding);

            string responseBody = streamReader.ReadToEnd(); //always invalid characters here
            streamReader.Close();
            stream.Dispose();
            byte[] buffer = Convert.FromBase64String(responseBody); 
        }
StreamReader是为字符而设计的 输入特定的编码, 而流类是设计的 用于字节输入和输出。使用 StreamReader,用于读取 来自标准文本文件的信息

        WebRequest request = WebRequest.Create("http://www.waterfootprint.org/images/gallery/original/apple.jpg");
        request.Method = "GET";
        request.Timeout = 10000;
        using (WebResponse response = request.GetResponse())
        {
            Stream stream = response.GetResponseStream();
            Encoding encoding = Encoding.UTF8;
            StreamReader streamReader = new StreamReader(stream, encoding);

            string responseBody = streamReader.ReadToEnd(); //always invalid characters here
            streamReader.Close();
            stream.Dispose();
            byte[] buffer = Convert.FromBase64String(responseBody); 
        }
在您接收原始字节的情况下,您需要直接使用
,使用
二进制读取器
或更高级别的抽象

        WebRequest request = WebRequest.Create("http://www.waterfootprint.org/images/gallery/original/apple.jpg");
        request.Method = "GET";
        request.Timeout = 10000;
        using (WebResponse response = request.GetResponse())
        {
            Stream stream = response.GetResponseStream();
            Encoding encoding = Encoding.UTF8;
            StreamReader streamReader = new StreamReader(stream, encoding);

            string responseBody = streamReader.ReadToEnd(); //always invalid characters here
            streamReader.Close();
            stream.Dispose();
            byte[] buffer = Convert.FromBase64String(responseBody); 
        }
        byte[] buffer = Convert.FromBase64String(responseBody); 
您得到的流不是base64编码的-它是一个纯图像字节流,因此只需直接分配字节,最简单的方法是使用:

        WebRequest request = WebRequest.Create("http://www.waterfootprint.org/images/gallery/original/apple.jpg");
        request.Method = "GET";
        request.Timeout = 10000;
        using (WebResponse response = request.GetResponse())
        {
            Stream stream = response.GetResponseStream();
            Encoding encoding = Encoding.UTF8;
            StreamReader streamReader = new StreamReader(stream, encoding);

            string responseBody = streamReader.ReadToEnd(); //always invalid characters here
            streamReader.Close();
            stream.Dispose();
            byte[] buffer = Convert.FromBase64String(responseBody); 
        }

通常在您必须以ASCII文本形式传输二进制数据(即作为XML CData元素或SOAP的一部分)时使用,但如果您希望通过HTTP传输二进制文件(即图像),则不使用。

它返回为二进制,而不是base-64编码。例如,如果我更改代码以直接从响应流创建图像,我会看到它出现在PictureBox控件中

        WebRequest request = WebRequest.Create("http://www.waterfootprint.org/images/gallery/original/apple.jpg");
        request.Method = "GET";
        request.Timeout = 10000;
        using (WebResponse response = request.GetResponse())
        {
            Stream stream = response.GetResponseStream();
            Encoding encoding = Encoding.UTF8;
            StreamReader streamReader = new StreamReader(stream, encoding);

            string responseBody = streamReader.ReadToEnd(); //always invalid characters here
            streamReader.Close();
            stream.Dispose();
            byte[] buffer = Convert.FromBase64String(responseBody); 
        }
    private void button1_Click(object sender, EventArgs e)
    {
        WebRequest request = WebRequest.Create("http://www.waterfootprint.org/images/gallery/original/apple.jpg");
        request.Method = "GET";
        request.Timeout = 10000;
        using (WebResponse response = request.GetResponse())
        {
            Stream stream = response.GetResponseStream();
            Bitmap b = (Bitmap)Bitmap.FromStream(response.GetResponseStream());
            pictureBox1.Image = b;
        }
    }

但是如果在服务器端,图像只是以Base64编码返回:
returnconvert.FromBase64String(imageString)
这会很奇怪-但是假设您可以使用
wc.DownloadString()
获取字符串,然后使用
Convert.FromBase64String()
将其转换回字节数组。