所有的空白角色?它是语言独立的吗?

时间:2013-08-11 05:18:04

标签: language-agnostic whitespace

我想知道所有的语言是否都像白色空间字符一样处理相同的字符集,还是有任何变化。

任何人都可以提供分隔可从键盘输入的空白​​字符的完整列表吗?如果它不同,差异和原因会更合适。如果您没有带出Whitespace或其变体(如果有的话),任何语言都会有所帮助。我当然不想要像Whitespace这样的语言的完整列表:)

3 个答案:

答案 0 :(得分:23)

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

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

You can see the complete list here。此外,您可以在官方Unicode Character Database中查看;Zs;以查看这些字符。请注意,此类别中的字符数可能会随着新的Unicode版本的出现而增长,因此我不会说有多少这样的字符存在,甚至尝试列出它们。

Zs Unicode 类别外,Unicode还定义了character properties。 Unicode定义的属性包括Whitespace属性。从Unicode 7.0开始,具有此属性的字符包括所有类别为Zs的字符加上一些控制字符(包括U + 0009,U + 000A,U + 000B,U + 000C,U + 000D ,和U + 0085)。您可以使用空白属性at Unicode.org here找到所有字符。

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

  • SPACE(代码点32,U + 0020)
  • TAB(代码点9,U + 0009)
  • LINE FEED(代码点10,U + 000A)
  • LINE TABULATION(代码点11,U + 000B)
  • FORM FEED(代码点12,U + 000C)
  • CARRIAGE RETURN(代码点13,U + 000D)

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

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

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

答案 1 :(得分:9)

Ray的回答提供了很好的信息,但不幸的是它缺少3个空格字符。 :(

更新:雷已经更新了他已经很好的答案,现在甚至更多的thoro和完成。我不知道它是如此复杂。 :)对于一个'简单'的答案,我提供以下内容。但是,理解他非常好地解释的额外复杂性非常有用。

目前有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网站本身,我在那里搜索“空白”。所以,正如表达式一样,我从“马的嘴里”得到它。如果你转到http://unicode.org/charts/uca/,你会得到一个带有左导航框的2帧,你可以点击“帮助”链接下的第3个链接,即“空白”链接。不幸的是,显示的框架并不是我称之为“用户友好”的框架。但是,显示的框架会为每个Unicode空白字符的十六进制值提供所有的原始列表。我相信这页是最“官方”的答案。

答案 2 :(得分:-4)

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

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

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