c# Обнаруживают xml, кодирующий от Массива байтов?

Вы можете использовать вычисленное значение для отображения исходного массива и суммирования значений. например, скажем, что исходный массив называется originalArray, сделайте:

 computed: {
   computedTotal() {
      let sum = 0
      originalArray.map(item => sum += item["Calculated Total"])
      return sum
  }
}

6
задан Antoine Aubry 3 May 2012 в 12:28
поделиться

3 ответа

Вы могли посмотреть на первый bytes1 с 40 выходами. Они должны содержать объявление документа (предполагающий, что оно имеет объявление документа), который должен или содержать кодирование, или можно предположить, что это - UTF-8 или UTF-16, который должен, должно быть очевидно из того, как Вы поняли <?xml часть. (Просто проверьте на оба шаблона.)

Реалистично, Вы ожидаете, что будете когда-либо получать что-нибудь кроме UTF-8 или UTF-16? В противном случае Вы могли проверить на шаблоны, которые Вы получаете в начале обоих из тех и выдаете исключение, если оно не следует ни за одним шаблоном. С другой стороны, если Вы хотите предпринять другую попытку, Вы могли бы всегда пытаться декодировать документ как UTF-8, повторно закодировать ее и видеть, возвращаете ли Вы те же байты. Это не идеально, но это могло бы просто работать.

Я уверен, что существуют более строгие способы сделать это, но они, вероятно, будут привередливыми :)


1 Вполне возможно меньше, чем это. Я, которым символы рисунка 20 должны быть достаточно, который составляет 40 байтов в UTF-16.

7
ответ дан 8 December 2019 в 02:35
поделиться

Решение, подобное этому вопросу, могло решить это при помощи Потока по массиву байтов. Затем Вы не должны будете играть на уровне байта. Как это:

Encoding encoding;
using (var stream = new MemoryStream(bytes))
{
    using (var xmlreader = new XmlTextReader(stream))
    {
        xmlreader.MoveToContent();
        encoding = xmlreader.Encoding;
    }
}
14
ответ дан 8 December 2019 в 02:35
поделиться

Первые 2 или 3 байта могут быть Порядком байтов Mark (BOM), который может сказать Вам, является ли поток UTF-8, или Обратным порядком байтов Unicode С прямым порядком байтов Unicode.

UTF-8 BOM является Обратный порядок байтов Unicode 0xEF 0xBB 0xBF, является Unicode-LittleEndiaon 0xFE 0xFF, 0xFF 0xFE

Если ни один из них не присутствует затем, можно использовать ASCII для тестирования на <?xml (обратите внимание, что самое современное поколение XML придерживается стандарта, которому не может предшествовать никакой пробел, xml объявляют).

ASCII используется вплоть до ?> таким образом, можно найти присутствие кодирования = и найти его значение. Если кодирование не присутствует или <?xml объявите не присутствует затем, можно принять UTF-8.

7
ответ дан 8 December 2019 в 02:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: