我在尝试从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;
}
答案 0 :(得分:1)
狂野猜测,但是如果您使用记事本创建了该文件,那么这不就是您的byte order mark吗?
答案 1 :(得分: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);