2

尝试从 MSI 中的二进制表中提取字符串时,我发现了一个奇怪的行为。

我有一个包含 的文件Hello world,我得到的数据是???Hello world. (文学问号。)

这是预期的吗?
开头总是正好是 3 个字符吗?


示例代码:

[CustomAction]
public static ActionResult CustomAction2(Session session)
{
    View v = session.Database.OpenView("SELECT `Name`,`Data` FROM `Binary`");
    v.Execute();

    Record r = v.Fetch();
    int datalen = r.GetDataSize("Data");
    System.IO.Stream strm = r.GetStream("Data");
    byte[] rawData = new byte[datalen];
    int res = strm.Read(rawData, 0, datalen);
    strm.Close();

    String s = System.Text.Encoding.ASCII.GetString(rawData);
    // s == "???Hello World"

    return ActionResult.Success;
}
4

2 回答 2

1

疯狂的猜测,但是如果您使用记事本创建文件,那不就是您的字节顺序标记吗?

于 2010-05-17T12:01:46.860 回答
0

尝试

String s = System.Text.Encoding.UTF8.GetString(rawData);
if (s.Length > 0 && s[0] == '\uFEFF')
{
    s = s.Substring(1);
}

代替String s = System.Text.Encoding.ASCII.GetString(rawData);

于 2013-06-14T06:39:06.727 回答