Ani*_*jee 45 unicode character-encoding unicode-string
任何人都可以告诉我Unicode可打印字符的范围是什么?[例如Ascii可打印字符范围是\ u0020 - \u007f]
Lie*_*yan 18
请参阅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的不可打印字符?更有可能的是,无论你想做什么,都是解决问题的错误方法.
leo*_*loy 13
首先,你应该在你的问题中删除"UTF8"这个词,它是不相关的(UTF8只是Unicode编码之一,它与你的问题正交).
第二:在Unicode中,"可打印/不可打印"的含义不太清楚.也许你的意思是" 图形特征 "; 如果空间是可打印的/图形的,人们甚至可以提出异议.非图形字符基本上由控制字符组成:范围0x00-0x0f加上其他一些分散的字符.
无论如何,绝大多数Unicode字符(超过200.000)都是"图形".但这当然并不意味着它们可以在您的环境中打印.
在我看来,如果你打算生成一个"随机可打印"的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.
Run Code Online (Sandbox Code Playgroud)
请注意,它说的是“定义为Go可打印”,而不是“定义为Unicode可打印”。似乎Unicode向导不敢深入。
您对Unicode的了解越多,您就越能认识到人类写作系统异常地多样化和深不可测。
特别地,特定“字符”是否可打印并不总是很明显。
零宽度空间是否可打印?连字点何时可以打印?是否存在一些字符的可打印性取决于它们在单词中的位置或与其相邻的字符?组合字符是否始终可以打印?
ASCII可打印字符范围是\ u0020-\ u007f
不,不是。\ u007f是DEL,通常不视为可打印字符。例如,它与标有“ DEL”的键盘键相关联,键盘键的最早目的是命令从某种介质(显示,文件等)中删除字符。
实际上,许多8位字符集具有许多不可打印的非连续范围。参见例如C0和C1控件。
小智 5
您应该做的是选择一种字体,然后生成一个列表,列出哪些 Unicode 字符为您的字体定义了字形。您可以使用像 freetype 这样的字体库来测试字形(测试 FT_Get_Char_Index(...) != 0)。
目前,Unicode 定义为从 开始U+0000并结束于U+10FFFF。第一个块“基本拉丁语”跨越U+0000到U+007F,最后一个块“补充私人使用区域-B”跨越U+100000到10FFFF。如果您想查看所有这些块,请参见此处:Wikipedia.org:Unicode 块;块列表。
让我们来分析一下拉丁语块 1 中的有效/无效内容。
如果您有兴趣过滤掉任何不可见字符,您将需要过滤掉:
U+0000控制U+0008U+000Eto U+001F:设备(即控制)U+007F:删除(控制)U+008Dto U+009F:设备(即控制)这是拉丁语块,分为更小的部分......
U+0000控制U+0008U+0009至U+000C: 空间U+000Eto U+001F:设备(即控制)U+0020: 空间U+0021至U+002F:符号U+0030至U+0039:数字U+003A至U+0040:符号U+0041至U+005A:大写字母U+005B至U+0060:符号U+0061to U+007A: 小写字母U+007B至U+007E:符号U+007F:删除(控制)U+0080to U+008C:Latin1-补充符号。U+008Dto U+009F:设备(即控制)U+00A0: 不间断空格。(IE, )U+00A1至U+00BF:符号。U+00C0to U+00FF:重音字符。Unicode 以支持非拉丁字符集而闻名,那么这些其他块是什么?这只是一个广泛的概述,请参阅wikipedia.org 页面以获取完整的列表。
Latin1 和 Latin1 相关块
U+0000to U+007F: 基础拉丁语U+0080至U+00FF:Latin-1 补充U+0100至U+017F:拉丁文扩展-AU+0180to U+024F: 拉丁文扩展-B可组合块
U+0250至U+036F:3 个街区。
非拉丁语、语言块
U+0370至U+1C7F:55 个区块。
非拉丁语、语言补充块
U+1C80至U+209F:11 个街区。
符号块
U+20A0至U+2BFF:22 个街区。
古代语言块
U+2C00至U+2C5F:1 块(格拉哥里)。
语言扩展块
U+2C60至U+FFEF:66 块。
特殊块
U+FFF0至U+FFFF: 1 块(特价)。
| 归档时间: |
|
| 查看次数: |
29264 次 |
| 最近记录: |