C ++ 0x中有哪些新的Unicode函数?

时间:2010-05-17 22:15:41

标签: c++ unicode c++11 standard-library utf-8

在几个来源中已经提到C ++ 0x将包括对Unicode的更好的语言级支持(包括类型和文字)。

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

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

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

1 个答案:

答案 0 :(得分:13)

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

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

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

如果您需要这些东西,您仍然需要依赖外部库 - <iostream>是改装的主要部分。

在新标准中为unicode添加了什么,具体

  • Unicode文字,通过u8“”,u“”和U“”
  • UTF-8,UTF-16和UTF-32 的
  • std::char_traits个类 来自ISO / IEC TR 19769:2004的
  • mbrtoc16c16rtombmbrtoc32c32rtomb
  • std::codecvt方面的区域设置库
  • std::wstring_convert类模板(使用codecvt机制进行代码集转换)
  • std::wbuffer_convert,除了原始数组外,与wstring_convert相同,不是字符串。