Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果我注入基本流会发生什么<;char>;带有编码VT_utf16的区域设置<;char>;方面_C++_C++11_Utf 16_Facet_Codecvt - Fatal编程技术网

C++ 如果我注入基本流会发生什么<;char>;带有编码VT_utf16的区域设置<;char>;方面

C++ 如果我注入基本流会发生什么<;char>;带有编码VT_utf16的区域设置<;char>;方面,c++,c++11,utf-16,facet,codecvt,C++,C++11,Utf 16,Facet,Codecvt,是否指定了在basic\u stream中插入带有codevt\u utf16facet的locale时会发生什么情况 基本上,我使用typedef wchar\u t tchar和typedef char tchar更改库的Unicode和非Unicode版本(我称之为)的接口。我希望通过始终使用带有codevt\u utf16facet的locale嵌入我的文件流来简化源代码。这到底行得通吗 (我不介意这种嵌入的fstream读取的文件是否必须只包含ASCII或当前全局语言环境中可表示的代码

是否指定了在
basic\u stream
中插入带有
codevt\u utf16
facet的locale时会发生什么情况

基本上,我使用
typedef wchar\u t tchar
typedef char tchar
更改库的Unicode和非Unicode版本(我称之为)的接口。我希望通过始终使用带有
codevt\u utf16
facet的locale嵌入我的文件流来简化源代码。这到底行得通吗

(我不介意这种嵌入的
fstream
读取的文件是否必须只包含ASCII或当前全局语言环境中可表示的代码点。)

编辑:


鉴于
codevt\u utf16
似乎是未指定的行为,那么将
codevt\u utf16
嵌入基本流怎么样?是否指定了此行为?

根据C++0x,
codevt\u utf*
只能用宽字符实例化。如果没有指定使用
char
会发生什么,唯一知道的方法是尝试

请记住,codecvt_utf16可转换为外部UTF-16表示形式或从外部UTF-16表示形式转换为外部UTF-16表示形式。也就是说,您的文件应该用UTF-16编码。您可能需要考虑使用UTF-8来代替。
顺便说一句,为什么现在会有人想要非Unicode的东西对我来说是个谜。人们喜欢使用受限字符集还是什么?

你从哪里得到的codevt\u utf16?这是正常的行为(注入流),所以我不太理解这个问题。注意:您应该在打开/使用流之前嵌入文件,否则嵌入调用将(可能)被默默忽略。@Martin:我想这个问题应该标记为c++11。那里有
std::codecvt\u utf16
。@Martin:你有指定该行为的参考资料吗?@wilx:没有,我没有解决由此引起的问题的经验。如果没有指定,这是未定义的行为,而且尝试它可能会吃掉你的孩子:)@n.m.:这是为了尽最大努力向后兼容。我同意任何新的应用程序都应该支持UNICODE。DNS名称和大多数客户端/服务器TCP协议都是以7位ASCII格式指定的。使用Unicode会浪费时间。似乎只有在我的标准草案中才支持用宽字符实例化。谢谢你,我接受这个答案。