我使用C++语言环境方面的工作越多,我理解的就越多 - 它们就被打破了.
std::time_get
- 与std::time_put
(因为它在C strftime/strptime中)不对称,并且不允许使用AM/PM标记轻松解析时间.ru_RU.UTF-8
).std::ctype
假设可以在每个字符的基础上完成上/下更新(情况转换可能会改变字符数并且它取决于上下文),这是非常简单的.std::collate
- 不支持校对强度(区分大小写或不区分大小写).以及更多...
谢谢.
编辑:澄清链接无法访问:
std::numpunct
将千位分隔符定义为char.因此,当U + 2002中的分隔符 - 不同类型的空间时,它不能作为单个字符在UTF-8中再现,而是作为多字节序列.
在C API中,struct lconv
将千位分隔符定义为字符串,并且不会遇到此问题.因此,当您尝试使用UTF-8语言环境在ASCII之外的分隔符格式化数字时,会生成无效的UTF-8.
要重现此错误,请使用imbued ru_RU.UTF-8
locale 将1234写入std:ostream
EDIT2:我必须承认POSIX C本地化API工作得更顺畅:
std::time_put::put
)然而,它仍然是完美的.
编辑3:根据有关C++ 0x的最新说明,我可以看到std::time_get::get
- 与...类似strptime
和相反std::time_put::put
.