21

I was wondering if all the language treats the same set of characters as white space charactes or is there any variation.

Can anyone provide complete list of White space characters separating the one which can be entered from keyboard? If it's different, the difference and the reason would be more appropriate. Any language is helpful if you don't bring out Whitespace or its variants(if any). I certainly don't want a complete list for language like Whitespace :)

4

3 回答 3

30

特定字符是否被归类为空白字符应取决于所使用的字符集。也就是说,编程语言可以自己定义什么是空白,这并非不可能。

大多数现代语言都使用 Unicode 字符集,它确实空格分隔符的定义。Zs类别中的任何字符都是空格分隔符

您可以在此处查看完整列表。此外,您可以;Zs;在官方Unicode 字符数据库中使用 grep for查看这些字符。请注意,随着新 Unicode 版本的出现,此类字符的数量可能会增加,因此我不会说存在多少这样的字符,也不会尝试列出它们。

除了Zs Unicode类别之外,Unicode 还定义了字符属性。由 Unicode 定义的属性中有一个 Whitespace 属性。从 Unicode 7.0 开始,具有此属性的字符包括所有类别为 Zs 的字符加上一些控制字符(包括 U+0009、U+000A、U+000B、U+000C、U+000D 和 U+0085)。您可以在此处的 Unicode.org上找到所有具有空格属性的字符。

现在许多语言,甚至是现代语言,都有用于正则表达式的特殊符号,例如\s[:space:]但要注意,这些仅指 ASCII 集中的某些字符;通常这些仅限于

  • 空格(代码点 32,U+0020)
  • 制表符(代码点 9,U+0009)
  • 换行(代码点 10,U+000A)
  • 行表(代码点 11,U+000B)
  • 换页(代码点 12,U+000C)
  • 回车(代码点 13,U+000D)

现在这个列表很有趣,因为它不仅包含空格分隔符 (Zs),还包含“控制,其他”类别 (Cc)。这就是编程语言在使用术语“空白”时的一般含义。

因此,对于空白字符的“完整列表”,回答您的问题的最佳方式可能是说“这取决于您的意思”。如果您的意思是“经典空格”,则可能是上面列出的六个字符。如果您想要更“现代”的东西,那么它就是这六个与 Unicode 类别 Zs 中的所有字符的结合。再说一次,您可能还需要查看其他块(例如,Jerry Coffin 对您的问题的评论中提到的 U+1361)。它还取决于您打算如何处理这些空格字符。

最后一件事:Unicode 还没有世界上所有的字符。它不断增长。有可能有一天会添加新的空格字符。目前,类别 Zs + 经典是您最好的选择。

于 2013-08-11T05:41:32.187 回答
15

当前有 25 个 Unicode 空白字符,带有以下十六进制“代码点”:

9, A, B, C, D, 20, 85, A0,
1680, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
2007, 2008, 2009, 200A, 2028, 2029, 202F, 205F,
3000

对应的十进制值为:

9, 10, 11, 12, 13, 32, 133, 160,
5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198,
8199, 8200, 8201, 8202, 8232, 8233, 8239, 8287,
12288

我最初从 Unicode.org 获得此信息,但我的旧链接不再是有效的 URL。维基百科有一个关于这个主题的不错的页面,如果有兴趣的话,在https://en.wikipedia.org/wiki/Whitespace_character ,它也提供了 25 个字符。(我没有交叉引用这些字符是相同的字符,但我相信 Unicode 联盟没有对他们的字符集做出如此重大的重大改变!)

我今天确实在 unicode 的网站上找到了一个简单的页面,但它看起来更像是一个草稿 html 页面,而不是任何支持或声称官方立场的东西。但它确实符合 Unicode 之前发布的关于其所有空白字符是什么的官方声明。(链接在我的回答下方的评论中。)

于 2015-01-27T20:56:41.857 回答
-5

如果您正在寻找一种有效的方法,我使用以下代码:

(c <= 32 && c >= 0) || c == 127;

0 到 31 是控制字符,32 是空格字符,127 是 ESC 字符。这适用于我知道的所有字符集,包括 UTF-8。

于 2015-07-21T01:07:55.557 回答