19

有几个消息来源提到 C++0x 将包括更好的 Unicode 语言级支持(包括类型和文字)。

如果该语言要添加这些新特性,那么很自然地假设标准库也会这样做。但是,我目前无法找到对新标准库的任何引用。我希望找到这些答案的答案:

  1. 新库是否提供将 UTF-8 转换为 UTF-16 等的标准方法?
  2. 新库是否允许将 UTF-8 写入文件、控制台(或从文件、控制台)。如果是这样,我们可以使用 cout 还是需要其他东西?
  3. 新库是否包含“基本”功能,例如:发现 UTF-8 字符串的字节数和长度,转换为大写/小写(这是否考虑了语言环境的影响?)

最后,这些函数是否在任何流行的编译器(如 GCC 或 Visual Studio)中都可用?

我试图寻找信息,但我似乎找不到任何东西。我实际上开始认为也许这些事情还没有决定(我知道 C++0x 是一项正在进行的工作)。

4

1 回答 1

13

新库是否提供将 UTF-8 转换为 UTF-16 等的标准方法?
不会。但是,新库确实提供std::codecvt了在处理 iostream 时为您进行转换的方面。ISO/IEC TR 19769:2004,C Unicode 技术报告,几乎逐字包含在新标准中。

新库是否允许将 UTF-8 写入文件、控制台(或从文件、控制台)。如果是这样,我们可以使用 cout 还是需要其他东西?
是的,您只需给 cout 灌输正确的codecvt方面。但是请注意,控制台不需要正确显示这些字符

新库是否包含“基本”功能,例如:发现 UTF-8 字符串的字节数和长度,转换为大写/小写(这是否考虑了语言环境的影响?)
AFAIK 该功能存在于现有的 C++03 标准。std::toupper当然,std::towupper功能就像在标准的先前版本中一样。没有任何专门针对 unicode 操作的新函数。

如果你需要这些东西,你仍然必须依赖外部库——<iostream>这是改造的主要部分。

新标准中具体为 unicode 添加了哪些内容?

  • Unicode 文字,通过 u8""、u"" 和 U""
  • std::char_traitsUTF-8、UTF-16 和 UTF-32 的类
  • mbrtoc16, c16rtomb, mbrtoc32, 和c32rtomb来自 ISO/IEC TR 19769:2004
  • std::codecvt语言环境库的方面
  • std::wstring_convert模板(使用codecvt代码集转换机制)
  • ,除了原始数组而不是字符串之外std::wbuffer_convert,它的作用相同。wstring_convert
于 2010-05-17T23:10:16.053 回答