WiX: извлечение двоичной строки в пользовательском действии приводит к появлению строки типа «??? хорошие данные» - PullRequest
2 голосов
/ 28 апреля 2010

Я только что обнаружил странное поведение при попытке извлечь строку из двоичной таблицы в 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 ]

1 голос
/ 17 мая 2010

Дикая догадка, но если вы создали файл с помощью Блокнота, это не может быть просто знак порядка байтов ?

0 голосов
/ 14 июня 2013

Попробуйте

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);

...