【发布时间】:2010-11-24 03:47:20
【问题描述】:
在一个项目中,所有内部字符串都保存为 utf-8 编码。该项目已移植到 Linux 和 Windows。现在需要 to_lower 功能。
在 POSIX 操作系统上,我可以使用 std::ctype_byname("ru_RU.UTF-8")。但是对于 g++ (Debian 4.3.4-1),ctype::tolower() 不能识别俄语 UTF-8 字符(拉丁文本小写很好)。
在 Windows 上,当我尝试使用“ru_RU.UTF-8”参数构造 std::ctype_byname 时,mingw 的标准库抛出异常“std::runtime_error: locale::facet::_S_create_c_locale name not valid”。
如何在 Windows 上为 utf-8 实现/查找 std::ctype?该项目已经依赖于 libiconv(codecvt facet 基于它),但我没有看到用它实现 to_lower 的明显方法。
【问题讨论】:
-
ctype 不能处理多字节编码的原因是它不能修改符号的大小。 utf-8 转换应由不同的接口处理。抱歉,我之前没能收到。
-
根据我的记忆
glibc为不同的语言环境生成信息。可能是相关机器上没有安装相关的语言环境文件。