【问题标题】:UTF-8 to local multibyte with STL使用 STL 的 UTF-8 到本地多字节
【发布时间】:2014-08-31 04:35:30
【问题描述】:

我需要使用多平台(Linux、Windows)方法将 UTF-8 字符串转换为本地多字节编码 (cp1251)。但是,除了首先将(使用std::codecvtstd::locale)UTF-8 转换为宽字符串,然后将宽字符串转换为本地字符串之外,我找不到在两个平台上都适用的标准(最好是 STL)方法。有没有办法通过一次转换来做到这一点?

【问题讨论】:

  • 1) cp1251 不是多字节编码 2) Linux 几乎从不使用 cp1251,它几乎完全使用 UTF-8。

标签: c++ c++11 utf-8 stl


【解决方案1】:

标准库不包含任何可以做到这一点的东西。至少不是直接的,并且您需要的组件之一尚未在任何 C++ 实现中实现:您将使用可以在 UTF-8 和 UTF-16 或 UTF-32 之间转换的 codecvt 方面,然后使用来自<cuchar> 标头从 UTF-16 或 UTF-32 转换为区域设置多字节编码。

由于该选项不可用,您最好的选择是使用可移植库,或者使用各种特定于平台的 API 自行实现转换,并使用可跨平台使用的通用 API 封装这些 API。您可以在 posix 平台上使用 libiconv,在 Windows 上使用 MultiByteToWideChar 和 WideCharToMultiByte。

【讨论】:

  • 感谢您澄清这一点。我想我会使用 STL 进行两阶段转换。
猜你喜欢
  • 2015-09-25
  • 2020-08-08
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 2019-06-26
  • 2011-02-22
  • 2012-11-12
  • 2023-01-16
相关资源
最近更新 更多