GoldenEagle88
@GoldenEagle88

Как работать с спец символами Delphi?

♥☺☻♦♣♠•◘○ Возможно ли как то кроме замены удалить все спец символы из строки?
  • Вопрос задан
  • 1565 просмотров
Пригласить эксперта
Ответы на вопрос 4
@Mercury13
Программист на «си с крестами» и не только
Думаю, ваша задача более высокого уровня такова. Пользователи разрисовывают свои имена всякими там картинками, задача — убрать их.

Немного непонятно, с какой версией Delphi вы работаете, но, предположим, с 2010+.
Там string эквивалентно UnicodeString, 16-битной строке неограниченной длины, управляемой подсчётом ссылок средствами Delphi.
Юникод очень велик и будет расширяться, в идеале там может быть 1,15 млн. символов. Из них 120 тыс. уже занято.
Поэтому лучшим решением будет делать не чёрный список символов, а белый.

Качаем базу символов Unicode (есть где-то на unicode.org).
Делаем из неё фильтр по каким-нибудь признакам: например, буква/цифра/знак/комбинирующий/пробел и направление письма — либо слева направо, либо адаптирующееся.
Также для простоты исключаем символы с кодом 65536+ (с дополнительных плоскостей, они кодируются двумя WideChar).
Вот этим белым списком и пользуемся. Проходимся по строке и убираем все лишние.
Ответ написан
svd71
@svd71
Судя по всему вы работаете с широкими символами типа WideString. Доподлинно мне такая функция не известна. Да и подобный финкционалитет тоже не требуется. Но вот следющий сценарий мог бы помочь.
1. Присвоить переменной типа AnsiString.
2. С помощью StringReplace() заменить все вопросы на пустую строку.
3. Обратное преобразование в Wide.
Ответ написан
Комментировать
Foolleren
@Foolleren
Компас есть, копать не люблю...
если уже есть строка то, можно создать новую строку и посимвольно скопировать только те что входят в белый список, затем заменить всю строку, вот и получается спец символов нет, а вместо замены символа - замена строки.
если ввод в форму, то можно отсечь символы ещё на этапе введения хотя формально там получается тоже замена.
Ответ написан
Комментировать
@dude2012
нечитабельные символы имеют ASCII код < 32 . Получить код символа можно функцией Ord, остальные символы можно по ASCII таблице глянуть. Среди них есть псевдографика, но почти всё читабельное.
Короче, пробежаться в цикле и добавить все символы с кодом больше 32. В FAR или cmd можно набрать Alt+0 на дополнительной клавиатуре (вот не помню там намлок выключен или включен должен быть) alt+1, alt + 2... как раз отобразятся Ваши символы :)
Буби это alt + 4, ASCII код символа равен 4
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы