Иногда в середине строки у меня есть злые непечатаемые символы. Эти строки вводятся пользователем, поэтому я должен заставить мою программу хорошо их воспринимать, а не пытаться изменить источник проблемы.
Например, у них может быть безразрывное пространство нулевой ширины в середину строки. Например, при синтаксическом анализе файла .po
одной проблемной частью была строка "he is a man of god"
в середине файла. Хотя все кажется правильным, проверка с помощью irb
показывает:
"he is a man of god".codepoints
=> [104, 101, 32, 105, 115, 32, 97, 32, 65279, 109, 97, 110, 32, 111, 102, 32, 103, 111, 100]
Я считаю, что знаю, что такое BOM
, и даже хорошо с этим справляюсь. Однако иногда у меня есть такие символы в середине файла, поэтому это не BOM
.
Мой текущий подход состоит в том, чтобы удалить всех персонажей, которых я нашел злыми, по-настоящему вонючим:
text = (text.codepoints - CODEPOINTS_BlACKLIST).pack("U*")
Больше всего я следил за этот пост, который привел меня к :print:
опции регулярных выражений. Однако мне это не пошло:
"m".scan(/[[:print:]]/).join.codepoints
=> [65279, 109]
поэтому возникает вопрос: Как удалить все непечатаемые символы из строки в рубине?
dump
, который создает новую строку с удаленными непечатаемыми символами и экранированием специальных символов. Документы для String # dump Ruby 2.3. 0, но я могу подтвердить, что это есть в документации уже в 1.8.7. - person Aaron   schedule 18.11.2016