【问题标题】:Why are "no-break space" and others ispunct() in GLibC?为什么 GLibC 中有“不间断空间”和其他 ispunct()?
【发布时间】:2018-11-29 19:38:52
【问题描述】:

我一直在查看 GNU LibC 赋予各种分隔符的 <wctype.h> 标志。基本上有两组。

第一组在iswspace()iswblank()(和isprint(),但对于另一组也是如此)返回true。其中包括:

目前没有投诉。 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 似乎正是我一直在寻找的......
  • 该文档还解释了为什么不间断空格不在空格类别中:因为它们不应该用作单词分隔符。

标签: c unicode glibc


【解决方案1】:

ISO/IEC 30112 信息技术 -- 文化约定的规范方法 声明,强调我的:

空格

定义要归类为空白字符的字符,查找句法边界。 [...] 类应不包含 NO-BREAK 空格字符 <U00A0><U2007><UFEFF>,因为这些字符不应用于单词边界。

【讨论】:

  • 有趣的是,该特定标准根据 glibc 输出定义其 LC_CTYPE,因此涉及到某种循环推理...
猜你喜欢
  • 2012-10-18
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 2017-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多