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

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

Восстановить пароль Регистрация
 
offmonreal
 Аватар для offmonreal
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 9
20.12.2016, 15:09     Проверка на непечатаемый символ #1
Есть некий массив 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
86 / 57 / 13
Регистрация: 08.04.2010
Сообщений: 406
20.12.2016, 21:42     Проверка на непечатаемый символ #2
Какая кодировка?
Humanoid
Почетный модератор
 Аватар для Humanoid
9869 / 3764 / 147
Регистрация: 12.06.2008
Сообщений: 11,346
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
 Аватар для offmonreal
0 / 0 / 0
Регистрация: 20.12.2016
Сообщений: 9
21.12.2016, 12:46  [ТС]     Проверка на непечатаемый символ #4
Humanoid
Благодарю за ответ, и отдельно за то какой он подробный.
А еще вчера я думал что все добрые люди вымерли...
Yandex
Объявления
21.12.2016, 12:46     Проверка на непечатаемый символ
Ответ Создать тему
Опции темы

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