ustring - std::string/std::wstring的原地替换?

6

关于C++和UTF8-为什么不只是替换ASCII?的续篇

为什么没有std::ustring可以在新应用程序中替代std::stringstd::wstring

当然,标准库需要相应的支持。类似于boost::filesystem3::path不关心字符串表示形式并且可以使用std::stringstd::wstring

2个回答

4
为什么需要更改任何内容?
在与环境交互的上下文中,stringwstring是对应于charwchar_t的字符串类,分别用于携带以"系统的窄多字节表示"编码的数据以及"系统编码"中固定宽度编码的数据。
另一方面,u8/u/U以及char16_tchar32_t,以及相应的字符串类,则旨在用于存储以UTF-8/16/32编码的Unicode代码点序列。
后者是一个独立的问题域。标准中没有桥接这两个域的机制(通常需要一个库,例如iconv(),来使此桥接可移植,例如通过转码WCHAR_T / UTF-32)。
这是我的相关问题标准列表:#1#2#3

2

std::u16stringstd::u32string。你可能想在一些标准库中使用它们,例如为了用fstream打开一个文件并给它命名。但这些标准库不会改变以使用这些类型,因为它们无法做到这一点。例如,一些平台接受几乎任意的字节字符串来命名要打开的文件,没有指定的编码方式。必须将其转换为具有特定编码方式的字符串将会破坏事情并且不兼容。


这些仅在 C++11/C++0x 中可用,但并非所有编译器或操作系统都完全支持。 - waddlesplash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接