Это старый вопрос, но он все еще действителен, и я думаю, что есть что-то полезное, но вкратце, по теме, о чем говорится в существующих ответах.
Unicode
Unicode определяет свойства для символов .
Одним из этих свойств является «Общая категория», которая имеет Основные классы и подклассы.Основными классами являются буквы, метки, знаки пунктуации, символы, разделители и др.
Зная свойства своих персонажей, вы можете решить, считаете ли вы их печатными в вашем конкретном контексте .
Вы всегда должны помнить, что такие термины, как «символ» и «печатный», часто сложны и имеют интересные грани.
Поддержка языка программирования
Некоторое программированиеЯзыки помогают с этой проблемой.
Например, язык Go имеет пакет "Unicode", который предоставляет множество полезных функций, связанных с Unicode, включая следующие:
func IsGraphic(r rune) bool
IsGraphic reports whether the rune is defined as a Graphic by Unicode. Such
characters include letters, marks, numbers, punctuation, symbols, and spaces,
from categories L, M, N, P, S, Zs.
func IsPrint(r rune) bool
IsPrint reports whether the rune is defined as printable by Go. Such
characters include letters, marks, numbers, punctuation, symbols, and
the ASCII space character, from categories L, M, N, P, S and the ASCII
space character. This categorization is the same as IsGraphic except
that the only spacing character is ASCII space, U+0020.
Обратите внимание, что в нем написано "определено как печатаемое Go, а не как определено как печатаемое Unicode.Это похоже на то, что волшебники в Юникоде не осмеливаются прятаться.
Для печати
Чем больше вы узнаете о Юникоде, тем больше понимаете, как неожиданно разнообразно и непостижимо странносистемы письма человека.
В частности, не всегда очевидна возможность печати определенного «символа».
Можно ли печатать пробел нулевой ширины?Когда печатается точка переноса?Существуют ли символы, пригодность для печати которых зависит от их положения в слове или от того, какие символы соседствуют с ними?Всегда ли можно печатать комбинированный символ?
Сноски
Диапазон символов ASCII для печати равен \ u0020 - \ u007f
Нет, это не так.\ u007f - это DEL, который обычно не считается печатным символом.Например, он связан с клавишей на клавиатуре с надписью «DEL», чья самая ранняя цель состояла в том, чтобы дать команду на удаление символа с некоторого носителя (дисплей, файл и т. Д.).
Фактически многие 8-битные наборы символовесть много непоследовательных диапазонов, которые нельзя распечатать.См., Например, элементы управления C0 и C1.