2010-09-22 188 views
38

任何人都可以告诉我Unicode可打印字符的范围是什么? [例如。 ascii可打印的字符范围是\ u0020 - \ u007f]Unicode可打印字符的范围是什么?

+1

\ u0000 - \ u0020也是Unicode中不可打印的 – Andrey 2010-09-22 14:22:37

+3

更像是\ u0020 - \ u007e – 2013-08-26 12:57:47

+0

你肯定对这个问题有很多仇恨。我喜欢这个主意。 – jsejcksn 2016-01-07 08:52:52

回答

19

见,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还具有数百个格式控制字符,例如零宽度非连接器,使字符间距更近,或双向文本控制。这种格式化控制字符比较分散。

更重要的是,你在做什么,需要你了解Unicode的非打印字符?更可能的是,无论你想要做什么都是解决你的问题的错误方法。

+3

我想创建一个随机的unicode字符串生成器,它将生成可打印的字符。 – 2010-09-22 14:29:53

+5

由谁打印?你想包括例如。所有的中文字符?许多用户不会为他们提供字体,因此“打印”它们不会给你任何东西,空白的盒子或其他无用的替换字符。 – bobince 2010-09-22 20:29:07

+5

一个很好的理由是避免安全漏洞:https://bugzilla.mozilla.org/show_bug.cgi?id = 968576 – 2015-04-07 20:46:22

-5

Unicode,stict术语,没有范围。数字可以走向无限。

你给出的不是UTF8,它有1个字节的ASCII字符。

至于范围,我相信没有可打印字符的范围。它一直在发展。检查我上面给出的页面。

+7

Afaik Unicode只能定义到0x10ffff,除此之外没有代码点将被分配 – Sebastian 2010-12-03 06:42:38

13

首先,你应该在你的问题中删除单词'UTF8',它不相关(UTF8只是Unicode的一种编码,它与你的问题是正交的)。

第二:“可打印/不可打印”的含义在Unicode中不太清楚。也许你的意思是“graphical character”;而且人们甚至可以争论一个空间是可打印/图形的。非图形字符基本上由控制字符组成:范围0x00-0x0f加上其他一些分散的字符。

无论如何,绝大多数Unicode字符(超过200.000)是“图形”。但这并不意味着它们可以在您的环境中打印。

在我看来,如果你打算生成一个“随机打印的”unicode字符串,试图包含所有“可打印”字符,这似乎是一个坏主意。

3

您应该做的是挑选一种字体,然后生成一个列表,其中包含为您的字体定义的字形。您可以使用像freetype这样的字体库来测试字形(测试FT_Get_Char_Index(...)!= 0)。