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()
将其转换回字节数组。