我读过在某些环境中std::string
内部使用 UTF-8。而在我的平台 Windows 上,std::string
只有 ASCII。可以使用 更改此行为std::locale
。我的 STL 版本没有,或者至少我找不到,用于字符串的 UTF-8 方面。然而,我确实有一个方面可用于这fstream
组类。
编辑:当我说“在内部使用 UTF-8”时,我指的是像这样的方法std::basic_filebuf::open()
,在某些环境中接受UTF-8
编码字符串。我知道这不是一个真正的std::string
问题,而是一些操作系统UTF-8
本身的使用。我的问题应该被解读为“您的实现如何处理无效序列的代码转换?”。
这些流如何处理其他平台/实现上的无效代码序列?
在我UTF8
facet
的 for 文件中,它只是返回一个错误,从而阻止读取更多的流。我本以为将错误更改为 Unicode "Invalid char" 0xfffd 值是一个更好的选择。
我的问题不限于UTF-8
,无效UTF-16
代理对如何?
让我们举个例子。假设您打开一个UTF-8
带有UTF-8
to的编码文件wchar_t
locale
。您的实现如何处理无效UTF-8
序列?或者,astd::wstring
并将其打印到std::cout
,这次使用一个单独的代理。