UTF-8到带有STL的本地多字节

UTF-8 to local multibyte with STL

本文关键字:多字节 STL UTF-8      更新时间:2023-10-16

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

标准库不包含任何可以执行此操作的内容。至少不是直接实现的,而且您需要的组件之一还没有在任何C++实现中实现:您将使用能够在UTF-8和UTF-16或UTF-32之间转换的codecvt方面,然后使用<cuchar>标头中的函数将UTF-16或UTF-32转换为区域设置多字节编码。

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