1С 8.3 Удалить нечитаемые символы из строки
Данные > Примеры кода 1С > 1С 8.3 Строка, текст, буквы
Перейти в раздел примеры кода 1С 8.3:

Функция предназначена для очистки текстовых строк от непечатаемых, служебных и специальных символов, которые могут мешать корректной обработке или отображению текста в системе 1С 8.3.
Возможности функции
Функция выполняет комплексную очистку текста, удаляя или заменяя на пробелы:
- Управляющие символы (переносы строк, табуляции, неразрывные пробелы)
- Специальные символы из Word (параграфы, маркеры списков)
- HTML-сущности (неразрывные пробелы, амперсанды)
- Битые и нестандартные символы
- Управляющие символы ASCII (0-31)
- Лишние пробелы (по краям и двойные внутри строки)
Параметры
ВхСтрока (тип: Строка) - исходная строка для обработки
Возвращаемое значение
Очищенная строка (тип: Строка)
Особенности реализации
- Замена на пробелы: Большинство нежелательных символов заменяется на пробелы, чтобы не "склеивать" слова.
- Полное удаление: Некоторые символы (битые, управляющие) удаляются полностью.
- Обработка пробелов: Функция нормализует пробелы, удаляя лишние.
- Комментированные строки: Возможность раскомментировать обработку HTML-тегов (<, >).
Пример использования:
Текст = "Пример•текста¶с нечитаемыми\x0Bсимволами";
ЧистыйТекст = УдалитьНечитаемыеСимволы(Текст);
// Результат: "Пример текста с нечитаемыми символами"
ЧистыйТекст = УдалитьНечитаемыеСимволы(Текст);
// Результат: "Пример текста с нечитаемыми символами"
Рекомендации:
- Для обработки HTML-контента рекомендуется раскомментировать строки с заменой < и >.
- Если нужно сохранить переносы строк, следует раскомментировать соответствующую проверку в цикле.
- Функция экспортируется (Экспорт), поэтому может быть использована в других модулях.
Функция особенно полезна при:
- Импорте данных из внешних источников
- Обработке текста, скопированного из Word или веб-страниц
- Подготовке текста для печати или экспорта
- Очистке пользовательского ввода
Удалить нечитаемые символы в 1С 8.3:
// Возвращает очищенную строку (тип: Строка)
// Текст = "Пример•текста¶с нечитаемыми\x0Bсимволами";
// ЧистыйТекст = УдалитьНечитаемыеСимволы(Текст);
// Результат: "Пример текста с нечитаемыми символами"
//
// Параметры:
// ВхСтрока (тип: Строка) - исходная строка для обработки
//
// Возвращаемое значение:
// Строка
Функция УдалитьНечитаемыеСимволы(ВхСтрока) Экспорт
// Удаляем переносы строк
ИсхСтрока = СтрЗаменить(ВхСтрока, Символы.ПС, " "); // Перевод строки
ИсхСтрока = СтрЗаменить(ИсхСтрока, Символы.ВК, " "); // Возврат каретки
ИсхСтрока = СтрЗаменить(ИсхСтрока, Символы.НПП, " "); // Неразрывный пробел \xA0
ИсхСтрока = СтрЗаменить(ИсхСтрока, Символы.ПФ, " "); // Перевод формы (страницы).
ИсхСтрока = СтрЗаменить(ИсхСтрока, Символы.ВТаб, " "); // Символ табуляции (вертикальной)
ИсхСтрока = СтрЗаменить(ИсхСтрока, Символы.Таб, " "); // Символ табуляции (горизонтальной).
ИсхСтрока = СтрЗаменить(ИсхСтрока, Символ(182), " "); // Символ параграфа
ИсхСтрока = СтрЗаменить(ИсхСтрока, Символ(176), " "); // Символ градуса
ИсхСтрока = СтрЗаменить(ИсхСтрока, Символ(160), " "); // Неразрывный пробел симв.
// Удаляем маркеры списков
ИсхСтрока = СтрЗаменить(ИсхСтрока, "•", "-"); // маркер 1
ИсхСтрока = СтрЗаменить(ИсхСтрока, "◦", "-"); // маркер 2
// Удаляем спец.HTML и Word
ИсхСтрока = СтрЗаменить(ИсхСтрока," ", " "); // HTML-пробел
ИсхСтрока = СтрЗаменить(ИсхСтрока,"&", " "); // Раскодировать (& → &).
//ИсхСтрока = СтрЗаменить(ИсхСтрока, "<", " "); // экранированное представление символа <
//ИсхСтрока = СтрЗаменить(ИсхСтрока, ">", " "); // экранированное представление символа >
ИсхСтрока = СтрЗаменить(ИсхСтрока, "¶", " "); // абзац симв.
ИсхСтрока = СтрЗаменить(ИсхСтрока, "�", ""); // битый символ
// Удаляем все управляющие символы (ASCII 0–31), \x01и \x0B
Для i = 0 По 31 Цикл
// Если i <> 9 И i <> 10 И i <> 13 Тогда // Не удаляем Tab (\t=9), LF (\n=10), CR (\r=13)
ИсхСтрока = СтрЗаменить(ИсхСтрока, Символ(i), "");
// КонецЕсли;
КонецЦикла;
// Удаляем лишние пробелы по краям
ИсхСтрока = СокрЛП(ИсхСтрока);
// Удаляем двойные пробелы внутри строки
Пока Найти(ИсхСтрока, " ") > 0 Цикл
ИсхСтрока = СтрЗаменить(ИсхСтрока, " ", " ");
КонецЦикла;
Возврат ИсхСтрока; //Возвращает очищенную строку (тип: Строка)
КонецФункции
// Текст = "Пример•текста¶с нечитаемыми\x0Bсимволами";
// ЧистыйТекст = УдалитьНечитаемыеСимволы(Текст);
// Результат: "Пример текста с нечитаемыми символами"
//
// Параметры:
// ВхСтрока (тип: Строка) - исходная строка для обработки
//
// Возвращаемое значение:
// Строка
Функция УдалитьНечитаемыеСимволы(ВхСтрока) Экспорт
// Удаляем переносы строк
ИсхСтрока = СтрЗаменить(ВхСтрока, Символы.ПС, " "); // Перевод строки
ИсхСтрока = СтрЗаменить(ИсхСтрока, Символы.ВК, " "); // Возврат каретки
ИсхСтрока = СтрЗаменить(ИсхСтрока, Символы.НПП, " "); // Неразрывный пробел \xA0
ИсхСтрока = СтрЗаменить(ИсхСтрока, Символы.ПФ, " "); // Перевод формы (страницы).
ИсхСтрока = СтрЗаменить(ИсхСтрока, Символы.ВТаб, " "); // Символ табуляции (вертикальной)
ИсхСтрока = СтрЗаменить(ИсхСтрока, Символы.Таб, " "); // Символ табуляции (горизонтальной).
ИсхСтрока = СтрЗаменить(ИсхСтрока, Символ(182), " "); // Символ параграфа
ИсхСтрока = СтрЗаменить(ИсхСтрока, Символ(176), " "); // Символ градуса
ИсхСтрока = СтрЗаменить(ИсхСтрока, Символ(160), " "); // Неразрывный пробел симв.
// Удаляем маркеры списков
ИсхСтрока = СтрЗаменить(ИсхСтрока, "•", "-"); // маркер 1
ИсхСтрока = СтрЗаменить(ИсхСтрока, "◦", "-"); // маркер 2
// Удаляем спец.HTML и Word
ИсхСтрока = СтрЗаменить(ИсхСтрока," ", " "); // HTML-пробел
ИсхСтрока = СтрЗаменить(ИсхСтрока,"&", " "); // Раскодировать (& → &).
//ИсхСтрока = СтрЗаменить(ИсхСтрока, "<", " "); // экранированное представление символа <
//ИсхСтрока = СтрЗаменить(ИсхСтрока, ">", " "); // экранированное представление символа >
ИсхСтрока = СтрЗаменить(ИсхСтрока, "¶", " "); // абзац симв.
ИсхСтрока = СтрЗаменить(ИсхСтрока, "�", ""); // битый символ
// Удаляем все управляющие символы (ASCII 0–31), \x01и \x0B
Для i = 0 По 31 Цикл
// Если i <> 9 И i <> 10 И i <> 13 Тогда // Не удаляем Tab (\t=9), LF (\n=10), CR (\r=13)
ИсхСтрока = СтрЗаменить(ИсхСтрока, Символ(i), "");
// КонецЕсли;
КонецЦикла;
// Удаляем лишние пробелы по краям
ИсхСтрока = СокрЛП(ИсхСтрока);
// Удаляем двойные пробелы внутри строки
Пока Найти(ИсхСтрока, " ") > 0 Цикл
ИсхСтрока = СтрЗаменить(ИсхСтрока, " ", " ");
КонецЦикла;
Возврат ИсхСтрока; //Возвращает очищенную строку (тип: Строка)
КонецФункции
//
3
комментарии
Игорь
01 апр 2025
Спасибо
Жаргал
27 мар 2025
Красота
Павел
27 мар 2025
Все символы и в одном месте. Супер, Спасибо.
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник