如何将 utf16 ushort 数组转换为 utf8 std::string



目前我正在编写一个插件,它只是现有库的包装器。插件的主机将一个 utf-16 格式的字符串传递给我,定义如下

typedef 无符号短PA_Unichar;

包装的库只接受常量字符*或标准::字符串 utf-8 格式的字符串我尝试编写一个转换函数,例如

std::string toUtf8(const PA_Unichar* data)
{
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>,char16_t> convert;
return std::string(convert.to_bytes(static_cast<const char16_t*>(data));
}

但显然这是行不通的,给我抛出一个编译错误"不允许从'const pointer'(又名'const unsigned short*')static_cast到'const char16_t *'"

那么最优雅/正确的方法是什么?

提前谢谢你。

您可以使用

basic_string(Iterator, Iterator) 构造函数将PA_unichar字符串转换为char16_t字符串,然后在尝试时使用std::codecvt_utf8_utf16方面:

std::string conv(const PA_unichar* str, size_t len)
{
  std::u16string s(str, str+len);
  std::wstring_convert<std::codecvt_utf8_utf16<char16_t>,char16_t> convert;
  return convert.to_bytes(s);
}

我认为这是对的。不幸的是,我无法对此进行测试,因为我的实现尚不支持它。我有一个wstring_convert的实现,我计划包含在GCC 4.9中,但我没有codecvt_utf8_utf16的实现来测试它。

最新更新