【发布时间】:2018-11-29 19:38:52
【问题描述】:
我一直在查看 GNU LibC 赋予各种分隔符的 <wctype.h> 标志。基本上有两组。
第一组在iswspace() 和iswblank()(和isprint(),但对于另一组也是如此)返回true。其中包括:
- U+0020 SPACE
- U+1680 OGHAM SPACE MARK
- U+2000 EN QUAD
- U+2001 EM QUAD
- U+2002 EN SPACE
- U+2003 EM SPACE
- U+2004 THREE-PER-EM SPACE
- U+2005 FOUR-PER-EM SPACE
- U+2006 SIX-PER-EM SPACE
- U+2008 PUNCTUATION SPACE
- U+2009 THIN SPACE
- U+200a HAIR SPACE
- U+205f MEDIUM MATHEMATICAL SPACE
- U+3000 IDEOGRAPHIC SPACE
目前没有投诉。 other 组让我感到困惑:
这些在iswspace() 和iswblank() 上返回false,但在iswpunct() 和iswgraph() 上返回true。
为什么最后三个被视为标点而不是空格?
显然,Java 同意 GLibC 的观点(参见链接页面)。 Unicode 将这两个组标记为类别“Zs”、“Space_Separator”...
【问题讨论】:
-
en.cppreference.com/w/cpp/string/wide/iswspace 有一个关于 ISO 30112 中的空格字符列表的注释,最后三个未在此处列出。
-
open-std.org/JTC1/SC35/WG5/docs/30112d10.pdf 该标准的工作草案,也许你会在那里找到一些线索。
-
@Mat:这是你提供给我的一个非常、非常有价值的链接,因为我面临的潜在问题比这个问题要大得多,而且 ISO 30112 似乎正是我一直在寻找的......
-
该文档还解释了为什么不间断空格不在空格类别中:因为它们不应该用作单词分隔符。