недопустимый байт 2 из 2-байтовой последовательности UTF-8

Я бы предложил следующее:

// defining a simple function, taking a string of HTML and a selector:
const textFromNode = (htmlString, nodeSelector) => {

  // defining an element to contain the provided HTML str]irng:
  let temp = document.createElement('div');

  // assigning the htmlString as the innerHTML of the created element:
  temp.innerHTML = htmlString;

  // taking the results of the node.querySelectorAll() method and converting
  // into an Array, using Array.from(); and then mapping that Array:
  return Array.from(temp.querySelectorAll(nodeSelector)).map(

    // returning the textContent of the node variable (a reference to the current
    // node in the Array of nodes), using String.prototype.trim() to remove leading
    // and trailing whitespace:
    (node) => node.textContent.trim()
  );
}

let array = [
    'Asia 1234',
    'Ireland 65dhh',
    'US West323-hth',
    'Asia Pacific ap-ss-1',
    'US West us-323223-1'
  ],

  // using Array.prototype.map() to return an Array based upon the
  // array Array of strings:
  ids = array.map(
    (html) => {

      // returning the results of the textFromNode() function:
      return textFromNode(html, '.hide');
    })
  // using Array.prototype.reduce() to flatten the resulting Array:
  .reduce((cur, acc) => {
    return acc.concat(cur);
  }, []);

console.log(ids);

Преимущество этого подхода состоит в том, что он избегает полагаться на регулярные выражения (обязательная ссылка на печально известный « RegEx соответствует открытым тегам, за исключением автономных тегов XHTML ] »), и использует только API DOM для более надежного восстановления строк из необходимых узлов. [ 1121]

Ссылки:

27
задан giannis christofakis 29 May 2018 в 11:19
поделиться

4 ответа

Чаще всего это происходит из-за кормления ISO-8859-x (Latin-x, как Latin-1), но анализатор думает, что он получает UTF-8. Определенные последовательности символов Latin-1 (два последовательных символа с ударением или умлаутами) образуют нечто, недопустимое как UTF-8, и, в частности, такое, что на основе первого байта второй байт имеет неожиданные старшие биты.

Это может легко произойти, когда какой-то процесс выгружает XML, используя Latin-1, но либо забывает вывести объявление XML (в этом случае парсер XML должен по умолчанию установить значение UTF-8, согласно XML спецификациям ) или утверждает, что это UTF-8, даже если это не так.

22
ответ дан odarboe 28 November 2019 в 05:30
поделиться

У меня была такая же проблема. Моя проблема заключалась в том, что я создал новый XML-файл с помощью jdom и FileWriter (xmlFile) . FileWriter не удалось создать файл UTF-8. Вместо этого с помощью FileOutputStream (xmlFile) решил эту проблему.

5
ответ дан svarog 28 November 2019 в 05:30
поделиться

Для тех, кто до сих пор получает такую ​​ошибку.

, так как UTF-8 используется, проверьте ваш xml-документ на наличие латинских букв или около того: у меня была та же проблема, и причина была в том, что у меня было это:

<n:name>Åke Jógvan Øyvind</n:name>

Надеюсь, это поможет

2
ответ дан Salah Klein 28 November 2019 в 05:30
поделиться

Либо парсер настроен на UTF-8, даже если файл закодирован иначе, либо файл объявлен как использующий UTF-8, но на самом деле это не так.

5
ответ дан 28 November 2019 в 05:30
поделиться
Другие вопросы по тегам:

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