Каков диапазон печатных символов Юникода? - PullRequest
43 голосов
/ 22 сентября 2010

Кто-нибудь может сказать, пожалуйста, каков диапазон печатаемых символов Юникода? [например. Диапазон печатных символов Ascii: \ u0020 -

Ответы [ 5 ]

18 голосов
/ 22 сентября 2010

См. http://en.wikipedia.org/wiki/Unicode_control_characters

Возможно, вы захотите обратить особое внимание на управляющий символ C0 и C1 http://en.wikipedia.org/wiki/C0_and_C1_control_codes

В вики сказано, что управляющий символ C0 находится в диапазоне U + 0000 — U + 001F и U + 007F (это тот же диапазон, что и ASCII), а управляющий символ C1 - в диапазоне U + 0080 — U + 009F.

кроме символа управления C, Unicode также имеет сотни символов управления форматированием, например не объединяющий нулевой ширины, который делает интервал между символами ближе, или двунаправленный текстовый контроль. Эти управляющие символы форматирования довольно разбросаны.

Что еще более важно, что вы делаете, что требует, чтобы вы знали непечатаемые символы Юникода? Скорее всего, что вы пытаетесь сделать, это неправильный подход к решению вашей проблемы.

13 голосов
/ 22 сентября 2010

Во-первых, вам следует удалить слово «UTF8» в вашем вопросе, это не имеет отношения к делу (UTF8 - это только одна из кодировок Unicode, это что-то ортогональное вашему вопросу).«печатный / не печатаемый» менее понятен в Юникоде.Возможно, вы имеете в виду « графический символ »;и можно даже оспорить, если пробел печатается / графический.Неграфические символы будут состоять, в основном, из управляющих символов: диапазон 0x00-0x0f плюс некоторые другие, которые разбросаны.

В любом случае, подавляющее большинство символов Юникода (более 200 000) являются «графическими».Но это, конечно, не означает, что они пригодны для печати в вашей среде.

Мне кажется плохой идеей, если вы собираетесь генерировать «произвольную печатную» строку юникода, пытаться включить все «печатные» символы.

6 голосов
/ 23 ноября 2018

Это старый вопрос, но он все еще действителен, и я думаю, что есть что-то полезное, но вкратце, по теме, о чем говорится в существующих ответах.

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.

3 голосов
/ 03 мая 2011

Что вам нужно сделать, это выбрать шрифт, а затем сгенерировать список символов Unicode, в которых для вашего шрифта определены глифы.Вы можете использовать библиотеку шрифтов, например, freetype, для проверки глифов (проверьте FT_Get_Char_Index (...)! = 0).

0 голосов
/ 22 сентября 2010

Unicode , термин stict, не имеет диапазона. Числа могут идти бесконечно.

То, что вы дали, не является UTF8, который имеет 1 байт для символов ASCII.

Что касается диапазона, я думаю, что нет диапазона печатных символов. Это всегда развивается. Проверьте страницу, которую я дал выше.

...