ustring - std::string/std::wstring 的就地替换?
Posted
技术标签:
【中文标题】ustring - std::string/std::wstring 的就地替换?【英文标题】:ustring - an inplace replacement of std::string/std::wstring? 【发布时间】:2011-12-06 13:46:43 【问题描述】:C++ and UTF8 - Why not just replace ASCII? 的延续
为什么没有std::ustring
可以在新应用程序中同时替换std::string
、std::wstring
?
当然在标准库中有相应的支持。与boost::filesystem3::path
不关心字符串表示并与std::string
和std::wstring
一起工作的方式类似。
【问题讨论】:
【参考方案1】:你为什么要替换任何东西?
string
和wstring
是对应于char
和wchar_t
的字符串类,在与环境接口的上下文中,它们分别用于携带编码为“系统的窄多字节表示”的数据”和“系统编码”中的固定宽度。
另一方面,u8
/u
/U
,以及char16_t
和char32_t
,以及相应的字符串类,用于存储编码为UTF-8/16/32。
后者是与前者不同的问题域。该标准不包含桥接两个域的机制(并且通常需要诸如 iconv()
之类的库来使此桥具有可移植性,例如通过转码 WCHAR_T/UTF-32)。
这是我的标准相关问题列表:#1、#2、#3
【讨论】:
【参考方案2】:有std::u16string
和std::u32string
。您可能想要使用这些的标准库,例如命名要使用 fstream 打开的文件,不会更改为使用这些,因为它们确实不能。例如,某些平台采用几乎任意字节字符串来命名要打开的文件,而没有指定编码。必须通过具有特定编码的字符串运行它会破坏事情并且不兼容。
【讨论】:
这些仅在C++11
/C++0x
中可用,并非所有编译器或操作系统都完全支持。以上是关于ustring - std::string/std::wstring 的就地替换?的主要内容,如果未能解决你的问题,请参考以下文章
我啥时候应该使用 std::string / std::string_view 作为参数/返回类型
创建 boost::tuple<std::string, std::string, int> 和 std::vector<int> 的映射
vc++中std::string/std::wstring的宏是啥?
std::string,std::vector,std::accumulate注意事项