c++ - 如果我将 basic_stream<char> 与 codecvt_utf16<char> facet 的语言环境相结合,会发生什么情况?

标签 c++ c++11 utf-16 facet codecvt

是否指定了如果我灌输 basic_stream<char> 会发生什么?使用语言环境 codecvt_utf16<char>方面?

基本上,我使用 typedef wchar_t tchar;typedef char tchar;改变我的库的(我称之为)Unicode 和非 Unicode 版本的接口(interface)。我想通过始终使用 codecvt_utf16<tchar> 为我的文件流注入(inject)语言环境来简化源代码方面。这无论如何都行得通吗?

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

编辑:

鉴于codecvt_utf16<char>似乎是未指定的行为,用 codecvt_utf16<wchar_t> 灌输 basic_stream 怎么样? ?是否指定了此行为?

最佳答案

根据 C++0x,codecvt_utf*<>只能用宽字符实例化。如果你使用 char 会发生什么没有指定,只有尝试才能知道。

请记住,codecvt_utf16 与外部 UTF-16 表示形式相互转换。也就是说,您的文件应该以 UTF-16 编码。您可能需要考虑改用 UTF-8。

作为旁注,我很困惑为什么现在有人想要任何非 Unicode 的东西。人们喜欢使用受限制的字符集还是什么?

关于c++ - 如果我将 basic_stream<char> 与 codecvt_utf16<char> facet 的语言环境相结合,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7148127/

相关文章:

c++ - MFC的 "Update Command UI"系统是怎么工作的?

c++ - Cython 调用 MKL 通过 vdMul 在元素乘法上崩溃

string - 从cv::Mat-> std::string-> cv::Mat的OpenCV转换会导致意外的副作用

c# - Java 与 C# 中的 UTF-16 编码

.net - 如何让 ASP.NET 输出 UTF-16 编码的文本?

c++ - 在键入 "exit"后,如何让我的程序打印用户键入的所有数据

c++ - 如何阻止 Windows 8 默认防病毒软件扫描我在 Visual Studio 中构建的可执行文件?

c++ - Clang vs GCC vs MSVC 模板转换运算符——哪个编译器是对的?

c++ - 在 Shift/Reduce 解析器生成器中指定 C++11 语法操作函数?

linux - grep unicode 16 支持