Форум программистов, компьютерный форум CyberForum.ru

С++ под Linux

Войти
Регистрация
Восстановить пароль
 
offmonreal
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 9
#1

Проверка на непечатаемый символ - C++ Linux

20.12.2016, 15:09. Просмотров 342. Ответов 3
Метки нет (Все метки)

Есть некий массив char * прежде чем скормить его string хотел проверить на непечатаемые символы (на случай ошибки)
Русские буквы могут занимать 2 байта а енглиш 1 байт а китайские ероглифы еще как-то наверно...
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2016, 15:09     Проверка на непечатаемый символ
Посмотрите здесь:

C++ Linux Проверка наличия данных во входном потоке stdin
C++ Linux Проверка на наличие процесса в системе
Проверка существования файла C++ Linux
C++ Linux проверка пути к файлу
C++ Linux UDP, проверка CRC
MS Excel Как автоматически удалить непечатаемый символ в ячейке
C++ Проверка строки на символ
C++ Linux Проверка прав перед запуском
PHP Непечатаемый символ при использовании include
Visual Basic Проверка на символ @
Проверка, нажата клавиша или нет, без остановки работы цикла C++ Linux
MS Word Определить непечатаемый символ

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dovgon
97 / 68 / 15
Регистрация: 08.04.2010
Сообщений: 442
20.12.2016, 21:42     Проверка на непечатаемый символ #2
Какая кодировка?
Humanoid
Почетный модератор
9794 / 3792 / 155
Регистрация: 12.06.2008
Сообщений: 11,399
20.12.2016, 22:45     Проверка на непечатаемый символ #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Dovgon Посмотреть сообщение
Какая кодировка?
Судя по
Цитата Сообщение от offmonreal Посмотреть сообщение
Русские буквы могут занимать 2 байта а енглиш 1 байт
видимо, UTF-8.

Так как речь идёт о юникоде, тогда появляется вопрос о том, какие символы вы называете непечатными? Все нерусские и не английские? Или только символы, с номером меньше 32 ? Меньше, чем пробел (символ с номером 32) всё можно назвать непечатными, кроме переводов строки (10 ('\n') и 13 ('\r')). Все остальные символы вполне себе печатные.

Можно заморочится и проверить целостность кодировки. Например, если посмотреть описание кодировки на Википедии, то там видно, как кодируется UTF-8. Можно написать свою функцию перевода из UTF-8 в юникод, попутно проверяя, что количество байт для каждого символа верное. Например, если текущий байт 0xxxxxxx, то следом никак не может идти байт 10xxxxxx. Или если текущий байт 110xxxxx, то следом должен быть только один байт 10xxxxxx и т.д.

А заодно можно проверять значение юникодовского символа (отсеивать слишком маленькие (до пробела, кроме перевода строки) и слишком большие). А можно заморочится и вообще по списку сверять.
offmonreal
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 9
21.12.2016, 12:46  [ТС]     Проверка на непечатаемый символ #4
Humanoid
Благодарю за ответ, и отдельно за то какой он подробный.
А еще вчера я думал что все добрые люди вымерли...
Yandex
Объявления
21.12.2016, 12:46     Проверка на непечатаемый символ
Ответ Создать тему
Опции темы

Текущее время: 08:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru