我使用的两个库在std::wstring
中存储了UTF-8字符串,另一个在std::string
中存储了字符串(UTF-8)。
我可以用来在两个库之间传递字符串的最佳/有效方法是什么
我目前在Windows上使用Visual C ++ v9 Express,但更喜欢便携式解决方案。
答案 0 :(得分:5)
假设你的意思是std::wstring
的UTF-16而不是UTF-8,你必须将字符串从一个库编码/解码到另一个库。我不确定STL是否为此提供了什么,但您可以使用Windows自己的MultiByteToWideChar()
和WideCharToMultiByte()
函数,只需几行代码即可在UTF-8和UTF-16之间进行转换。然后,您可以将其包装到您自己的函数中,这样您就可以在找到更便携的东西时替换逻辑,例如:
std::wstring Utf8ToUtf16(const std::string &s)
{
std::wstring ret;
int len = MultiByteToWideChar(CP_UTF8, 0, s.c_str(), s.length(), NULL, 0);
if (len > 0)
{
ret.resize(len);
MultiByteToWideChar(CP_UTF8, 0, s.c_str(), s.length(), const_cast<wchar_t*>(ret.c_str()), len);
}
return ret;
}
std::string Utf16ToUtf8(const std::wstring &s)
{
std::string ret;
int len = WideCharToMultiByte(CP_UTF8, 0, s.c_str(), s.length(), NULL, 0, NULL, NULL);
if (len > 0)
{
ret.resize(len);
WideCharToMultiByte(CP_UTF8, 0, s.c_str(), s.length(), const_cast<char*>(ret.c_str()), len, NULL, NULL);
}
return ret;
}
答案 1 :(得分:1)
考虑ICU。它是便携式的,编码之间有很多转换器