2

这是我的一段代码(文件是一种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)
"??"

我究竟做错了什么?

4

3 回答 3

5

127 以上的字符不能表示为 ASCII(这是一种 7 位编码),因此会转换为?.

你想达到什么目的?还有许多其他编码可能更适合您尝试做的事情 - 或者根本没有编码。理解 char 不等同于 byte 很重要。

如果标头是“固定”的 4 字节序列,请不要使用字符,而是直接使用字节(或整数表示 - 请参阅 BitConverter 类将字节数组转换为其他内容)。

于 2012-09-10T15:46:25.717 回答
3

ASCII 字符代码在 0 到 127 的范围内。您的数据超出了该范围。因此,将数据解释为 ASCII 的尝试失败了。?字符用于表示无法解码的字符。

前 4 个字节(十六进制)是

FF D8 FF E0

这是JPEG 文件的标题。

因此,将这些字节转换为字符串并不是合适的做法。

于 2012-09-10T15:47:08.713 回答
1

这是因为这些字符无法使用 ASCII 打印 - 请尝试使用Encoding.UTF8.GetString(header)

编辑:由于盲目地使用 UTF8 似乎不合适,您也许可以尝试以下方法:- Request.ContentEncoding.GetString(header)应该使用请求中配置的编码。

于 2012-09-10T15:48:21.427 回答