是否指定了如果basic_stream<char>
使用带有codecvt_utf16<char>
方面的区域设置的情况会发生什么?
基本上,我使用typedef wchar_t tchar;
和typedef char tchar;
来改变(我称之为)我的库的Unicode和非Unicode构建的接口。我希望通过始终使用codecvt_utf16<tchar>
facet的语言环境来填充我的文件流,从而简化源代码。无论如何这都会起作用吗?
(我不介意这样的简化fstream
读取的文件是否必须只包含ASCII或只包含当前全局语言环境中可表示的代码点。)
修改
鉴于codecvt_utf16<char>
似乎是未指明的行为,那么使用codecvt_utf16<wchar_t>
填充basic_stream呢?是否指定了此行为?
答案 0 :(得分:1)
每个C ++ 0x,codecvt_utf*<>
只能用宽字符实例化。如果你没有指定使用char
会发生什么,唯一的方法就是尝试。
请记住,codecvt_utf16会转换为外部UTF-16表示形式。也就是说,您的文件应该以UTF-16编码。您可能需要考虑使用UTF-8。
作为旁注,对我来说,为什么现在有人想要任何非Unicode的东西,这是一个谜。人们喜欢使用受限制的字符集还是什么?