6

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

typedef 无符号短 PA_Unichar;

并且包装的库只接受一个 const char* 或一个 std::string 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指针'(又名'const unsigned short *')到'const char16_t *'的static_cast”

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

先感谢您。

4

1 回答 1

2

您可以使用构造函数将PA_unichar字符串转换为字符串,然后按照您的尝试使用构面:char16_tbasic_string(Iterator, Iterator)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来测试它。

于 2012-12-15T21:07:52.467 回答