WiX: извлечение двоичной строки в пользовательском действии приводит к появлению строки типа "??? хорошие данные"
Я просто обнаружил странное поведение при попытке извлечь строку из двоичной таблицы в 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;
}
2 ответа
Решение
Неожиданное предположение, но если вы создали файл с помощью Блокнота, разве это не могло быть вашим знаком порядка байтов?
Пытаться
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);