我想知道所有语言是否都将相同的字符视为空格字符,还是存在一些变化。
是否可以提供完整的空白字符列表,区分可以由键盘输入和不同的字符?如果有区别,说明区别及原因更加合适。任何语言都可以,只要不涉及Whitespace
或其变体(如果有的话)。当然,我不需要像Whitespace
这样的语言的完整列表 :)。
我想知道所有语言是否都将相同的字符视为空格字符,还是存在一些变化。
是否可以提供完整的空白字符列表,区分可以由键盘输入和不同的字符?如果有区别,说明区别及原因更加合适。任何语言都可以,只要不涉及Whitespace
或其变体(如果有的话)。当然,我不需要像Whitespace
这样的语言的完整列表 :)。
一个特定的字符是否被归类为空白字符取决于使用的字符集。尽管如此,编程语言也可以对构成空格的内容进行自定义。
大多数现代语言使用Unicode字符集,其中确实有“空格分隔符字符”的定义。在Zs
类别中的任何字符都是“空格分隔符”。
您可以在此处查看完整列表。此外,您可以在官方Unicode字符数据库中搜索;Zs;
以查看那些字符。请注意,随着新的Unicode版本出现,此类别中的字符数量可能会增加,因此我不会说有多少此类字符存在,甚至不会试图列出它们。
除了ZsUnicode 类别之外,Unicode还定义了字符属性。 Unicode定义的属性中包括空格属性。从Unicode 7.0开始,具有此属性的字符包括所有类别为Zs的字符以及一些控制字符(包括U+0009、U+000A、U+000B、U+000C、U+000D和U+0085)。您可以在Unicode.org网站上查找所有具有whitespace属性的字符。
现在,许多语言(甚至是现代语言)都有用于正则表达式的特殊符号,例如\s
或[:space:]
,但要注意,这些仅指ASCII集中的某些字符;通常限制在
这个列表很有趣,因为它不仅包含空格分隔符(Zs),还包括“控制,其他”类别(Cc)。当编程语言使用术语“空格”时,通常指的就是这些。
因此,回答你的“完整列表”问题可能最好的方法是说“这要看你的意思是什么”。如果你的意思是“经典空格”,那么可能就是上面列出的六个字符。如果你想要更“现代”的东西,那么它就是这六个字符与Unicode类别Zs中的所有字符的并集。但也许你需要查找其他块中的字符(例如Jerry Coffin在评论中提到的U+1361)。这还取决于你打算如何使用这些空格字符。
现在最后一件事:Unicode还没有覆盖世界上的每个字符;它还在不断增长。可能将来会添加新的空格字符。目前,类别Zs + 经典字符是你最好的选择。
\s
确实一直包括了Unicode类别为“其他控制”(Cc
)的五个字符U+0009到U+000D。所以发展出来的是将Zs
和Cc
分开的不同的Unicode _类别_以及一个Unicode _属性_,将类似空格的控制字符与符号空格统一起来。在我的经验中,类别通常比属性得到更好的支持(例如使用\p{}
的正则表达式),但谁知道呢,也许有一天会改变? - Ray Toal当前共有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获取这些信息的,但我的旧链接现在已经无法使用。如果有人感兴趣的话,维基百科有一个关于空白字符的不错的页面:https://en.wikipedia.org/wiki/Whitespace_character,其中列出了25个字符。(我没有交叉检查这些字符是否与Unicode负责的字符集相同,但我相信Unicode联盟没有对它们的字符集做出如此重大的破坏性更改!)
今天我在unicode的网站上找到了一个简单的页面,但它看起来更像是一个草案html页面,而不是支持或宣称正式立场的任何东西。但它确实与之前Unicode发布的所有空白字符的官方声明相匹配。
6158、8203、8204、8205、8288、65279
。 - A1rPun(c <= 32 && c >= 0) || c == 127;
0到31是控制字符,32是空格字符,127是ESC字符。这适用于我所知道的所有字符集,包括UTF-8。