Эти символы выглядят как обычные пробелы, но на самом деле очень хитрые — их часто используют для защиты от ИИ или копипаста.
Настоятельно рекомендую всегда проверять символы, прежде чем вставлять их куда-либо, особенно если ты просишь ИИ переписать текст. Велика вероятность, что этот «умник» может добавить такие скрытые символы.
Что именно они обычно вставляют
U+00A0 NO-BREAK SPACE (NBSP)Выглядит как обычный пробел, но не равен U+0020.
Часто появляется из
HTML ( ).U+202F NARROW NO-BREAK SPACEУзкий неразрывный пробел (часто вокруг единиц измерения, процентов, во франц. типографике).
U+2009 THIN SPACEТонкий пробел (типографика).
U+200B ZERO WIDTH SPACEВообще невидимый (ширина 0), но символ есть — из-за него строки “не совпадают”.
вот они:
# Пробелоподобные символы -> обычный пробел
SPACE_LIKE_TO_SPACE = {
"\u00A0": " ", # NO-BREAK SPACE
"\u202F": " ", # NARROW NO-BREAK SPACE
"\u2007": " ", # FIGURE SPACE
"\u2009": " ", # THIN SPACE
"\u200A": " ", # HAIR SPACE
"\u2002": " ", # EN SPACE
"\u2003": " ", # EM SPACE
"\u2004": " ", # THREE-PER-EM SPACE
"\u2005": " ", # FOUR-PER-EM SPACE
"\u2006": " ", # SIX-PER-EM SPACE
"\u2008": " ", # PUNCTUATION SPACE
"\u205F": " ", # MEDIUM MATHEMATICAL SPACE
"\u3000": " ", # IDEOGRAPHIC SPACE
"\t": " ", # TAB -> пробел
}
# Невидимые символы, которые обычно мешают совпадениям -> удалить
REMOVE_CHARS = {
"\u200B", # ZERO WIDTH SPACE
"\u200C", # ZERO WIDTH NON-JOINER
"\u200D", # ZERO WIDTH JOINER
"\u2060", # WORD JOINER
"\uFEFF", # ZERO WIDTH NO-BREAK SPACE / BOM
}
мой небольшой скрипт:
1. Нормализовать файл и записать результат:
python normalize_wс.py file.txt -o fixed.txt
2. Передать текст напрямую:
python normalize_wс.py -t "Hello, A\u00A0B\u200BC"
3. Через stdin:
cat file.txt | python normalize_wс.py > fixed.txt
#script #python


