我使用 C++ 语言环境方面的工作越多,我就越了解 --- 它们被破坏了。
std::time_get
-- 与std::time_put
(如在 C strftime/strptime 中一样)不对称,并且不允许使用 AM/PM 标记轻松解析时间。- 我最近发现,在某些语言环境(如
ru_RU.UTF-8
)下,简单的数字格式可能会产生非法的 UTF-8。 std::ctype
假设上/下可以在每个字符的基础上完成(大小写转换可能会改变字符数并且它取决于上下文)是非常简单的。std::collate
-- 不支持排序规则(区分大小写或不区分大小写)。- 无法在时间格式中指定与全球时区不同的时区。
以及更多...
- 有人知道 C++0x 的标准方面是否会发生任何变化?
- 有什么方法可以带来这种变化的重要性?
谢谢。
编辑:如果链接无法访问,请进行说明:
std::numpunct
将千位分隔符定义为 char。因此,当 U+2002 中的分隔符——不同类型的空间时,它不能在 UTF-8 中作为单个字符再现,而是作为多字节序列再现。
在 C APIstruct lconv
中,将千位分隔符定义为字符串,并且不会遇到此问题。因此,当您尝试使用 UTF-8 语言环境使用 ASCII 以外的分隔符格式化数字时,会产生无效的 UTF-8。
要重现此错误,请将 1234 写入带有灌输ru_RU.UTF-8
语言环境的 std:ostream
EDIT2:我必须承认 POSIX C 本地化 API 工作得更顺畅:
- strftime 有倒数——strptime(strftime 与 相同
std::time_put::put
) - 由于我上面提到的一点,数字格式没有问题。
然而,它仍然是完美的。
EDIT3:根据关于 C++0x 的最新注释,我可以看到std::time_get::get
-strptime
与std::time_put::put
.