我知道ICU和像code project上的utf8这样的小型库,但这些都不是我想要的。
我真正想要的是像ICU一样的东西,但包装得更友好。
具体来说:
编辑: 此外,经过查看c++0x标准并注意到utf8、utf16和utf32字面值,这是否意味着标准库(例如字符串、流等)将完全支持这些编码以及它们之间的转换?如果是这样,有人知道Visual Studio何时将支持这些功能吗?
编辑2: 至于使用现有的c++支持,我会查找区域设置和facet相关的内容。
我遇到的一个问题是,在使用围绕wchar_t定义的流进行文件I/O时,虽然在Windows下wchar_t是2个字节,但似乎仍然使用ascii进行文件本身。
我真正想要的是像ICU一样的东西,但包装得更友好。
具体来说:
- 完全面向对象
- 实现c++标准流,或至少执行相同的任务。
- 可以以本地化相关的方式格式化时间、日期等(例如,在英国使用dd/mm/yy,在美国使用mm/dd/yy)。
- 让我选择字符串的“内部”编码,这样我就可以在Windows上使用UTF-16,避免在将字符串传递给和从Windows API和DirectX交换时进行大量转换。
- 方便地在编码之间转换字符串。
编辑: 此外,经过查看c++0x标准并注意到utf8、utf16和utf32字面值,这是否意味着标准库(例如字符串、流等)将完全支持这些编码以及它们之间的转换?如果是这样,有人知道Visual Studio何时将支持这些功能吗?
编辑2: 至于使用现有的c++支持,我会查找区域设置和facet相关的内容。
我遇到的一个问题是,在使用围绕wchar_t定义的流进行文件I/O时,虽然在Windows下wchar_t是2个字节,但似乎仍然使用ascii进行文件本身。
std::wofstream file(L"myfile.txt", std::ios::out);
file << L"Hello World!" << std::endl;
导致文件中出现以下十六进制内容:
48 65 6C 6C 6F 20 57 6F 72 6C 64 0D 0A
这显然是ASCII码,而不是预期的UTF-16输出:
FF FE 48 00 65 00 6C 00 6C 00 6F 00 20 00 57 00 6F 00 72 00 6C 00 64 00 0D 00 0A 00
ru_RU.UTF-8
,则编码为utf-8;如果它是ru_RU.KOI-8
,那么它就是KOI。您还可以指定其他语言环境:locale::globale(locale("de_DE.ISO-8859-1"));
(注意,我使用POSIX名称语言环境名称,对于Windows,您应该检查语言环境名称是什么)。 - Artyom