C# - Encoding.ASCII.GetString()返回“??”而不是实际的字符串,为什么?

时间:2012-09-10 15:45:02

标签: c#

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

我做错了什么?

3 个答案:

答案 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)应使用请求中配置的编码。