Сен
21
2021

Исправляем ошибку XML syntax error: illegal character code в Go

При работе с XML в Golang вы можете получить ошибку по типу XML syntax error: illegal character code.

У меня, например, полная ошибка такая: XML syntax error on line 247043: illegal character code U+001F. Работал я с пакетом github.com/antchfx/xmlquery, но ошибка из базового пакета go encoding/xml.

Ошибка значит то, что в файле есть какие-то посторонние символы, которые парсер не может обработать.

Как исправить

Для исправления есть 2 пути:

  1. Попытаться удалить вручную не верные символы из xml файла.
  2. Отфильтровать все символы в xml строке, прежде чем парсить.

Удаление не нужных символов

Парсер, как правило, не спотыкается на обычных печатных символах. Ошибка происходит на системных знаках.

Наш план:

  • Вычитать XMLфайл
  • Отфильтровать символы
  • Передать новую строку в парсер XML

Код:

// Читаем файл
fileBytes, err := ioutil.ReadFile("file.xml")

if err != nil {
	panic(err)
}

// Набор байт из файла превращаем в строку
xmlStr := string(fileBytes)

// Фильтруем символы, оставляя только видимые
xmlStr = strings.Map(func(r rune) rune {
	if unicode.IsGraphic(r) {
		return r
	}

	return -1
}, xmlStr)

// Отфильтрованную успешно строку передаем в парсер
xmlDoc, err := xmlquery.Parse(strings.NewReader(xmlStr))

if err != nil {
	panic(err)
}

Работают тут две функции:

  • strings.Map - применяет фильтр ко всем символам в строке. Если фильтрующая функция возвращает отрицательное значение, символ удаляется.
  • unicode.IsGraphic - проверяет символ на то что он "видимый", а не какой-то системный, который не показывается пользователям.
Пожалуйста, оцените на сколько вам понравилась статья!
Голосов: 3 Среднее: 2.3