这是我的一段代码(文件是HttpPostedFileBase
类型):
var imageStream = file.InputStream;
var header = new Byte[4];
imageStream.Read(header, 0, header.Length);
现在,当我的代码运行时,我放置一个断点,并在我的即时窗口中检查值:
header
{byte[4]}
[0]: 255
[1]: 216
[2]: 255
[3]: 224
但是,当我想将这个字节数组转换为ASCII字符串时,我得到这个(通过立即窗口获得的值):
Encoding.ASCII.GetString(header)
"????"
Encoding.ASCII.GetString(header, 0, 2)
"??"
我做错了什么?
答案 0 :(得分:5)
127以上的字符不能表示为ASCII(7位编码),因此会变成?
。
你想要达到什么目的?还有许多其他编码可能更适合您正在尝试的内容 - 或者根本不需要编码。重要的是要理解char不等于一个字节。
如果标头是“固定的”4字节序列,则不要使用字符而是直接使用字节(或整数表示 - 请参阅BitConverter类将字节数组转换为其他内容)。
答案 1 :(得分:3)
ASCII字符代码的范围为0到127(含)。您的数据超出了该范围。因此,将数据解释为ASCII的尝试失败。 ?
个字符用于表示无法解码的字符。
前四个字节(十六进制)是
FF D8 FF E0
这是JPEG file的标题。
因此,将这些字节转换为字符串只是不恰当的行动方式。
答案 2 :(得分:1)
因为这些字符无法使用ASCII打印 - 请尝试使用Encoding.UTF8.GetString(header)
。
编辑:
由于盲目地使用UTF8似乎不合适,您可以尝试以下方法: -
Request.ContentEncoding.GetString(header)
应使用请求中配置的编码。