我如何编写std :: codecvt方面?

Bil*_*eal 12 c++ windows codecvt

我如何编写std :: codecvt方面?我喜欢写那些从UTF-16去UTF-8,从UTF-16去系统当前代码页(窗口,所以CP_ACP),以及系统的OEM代码页(窗口,所以CP_OEM).

跨平台是首选,但Windows上的MSVC也很好.关于如何正确使用这个类,是否有任何类型的教程或任何性质的东西?

Bas*_*evs 9

我写了一个基于iconv的.它可以在Windows或任何POSIX OS上使用.(显然你需要与iconv链接).

请享用

"如何"问题的答案是遵循codecvt参考.两年前我无法在互联网上找到任何更好的指示.

重要通知

  • 从理论上讲,不需要这样的工作.在任何标准支持平台上,codecvt_byname都应该足够了.但实际上有些编译器不支持或不支持这个类.codecvt_byname在不同编译器上的接口也有所不同.
  • 我的工作示例是使用codecvt的状态模板参数实现的.始终使用标准的mbstate类型,因为这是将codecvt与标准iostream类一起使用的唯一方法.
  • std :: mbstate_t类型不能以跨平台的方式用作64位平台上的指针.
  • 无状态转换适用于短字符串,但如果您尝试转换大于streambuf内部缓冲区大小的数据块(UTF本质上是有状态编码),则可能会失败