Код: Выделить всё
std::string Result="";
. . . . . .
for (i=0, p=Buffer; i<BufferSize; ++i, ++p)
{
Result+=*p;
}
И ты считаешь это удачным решением задачи? Если строку в виде std::string наращивать посимвольно, то это приведёт к жудким тормозам при выполнении программы. На коротких строках это может и незаметно будет, но на более длинных текстах программа будет просто умирать.
Тем, что мне придётся таскать c_str по всему тексту для каждого вызова. И совсем другое дело, если приведение к нуль-терминальной завернуто в саму функцию приведения к std::string.
Это вообще решается элементарно. Можно создать перегруженную функцию, которая на входе будет принимать строку в виде std::wstring и передавать вызов одноимённой функции, у которой на входе будет LPCWSTR. Вот как я это сделал...
Код: Выделить всё
std::string WcharToUtf8(LPCWSTR wszInputStr)
{
USES_CONVERSION;
LPCSTR output = W2CA_CP(wszInputStr, CP_UTF8);
//
return std::string(output);
}
std::string WcharToUtf8(const std::wstring& wInputStr)
{
return WcharToUtf8(wInputStr.c_str());
}
Теперь одну и ту же функцию WcharToUtf8 я могу использовать как для строк LPCWSTR, так и для строк std::wstring.
Ну а теперь самое главное: проверим на практике работоспособность функции.
Если полученную на выходе строку в кодировке UTF-8 попытаться вывести на консоль, то нормально будут отображаться только латинские буквы, а вместо кириллицы получим нечитаемый текст.
Значит нужно отобразить полученный текст каким-то иным способом.
Попробуем записать его в текстовый файл в виде страницы HTML и затем открыть страницу веб-браузером...
Код: Выделить всё
LPCWSTR wszHtmlPage =
L"<!DOCTYPE html>"
L"<html><head>"
L"<meta content=\"text/html; charset=utf-8\" http-equiv=\"content-type\" />"
L"<title>Всем привет!</title>"
L"</head><body>"
L"<h2>Это строка текста в кодировке UTF-8</h2>"
L"</body></html>";
std::string utf8 = WcharToUtf8(wszHtmlPage);
// Запись в файл
FILE *f = NULL;
_tfopen_s(&f, _T("HelloUTF8.html"), _T("w"));
if (f != NULL)
{
fputs(utf8.c_str(), f);
fclose(f);
}
При выполнении кода у меня появился файл
HelloUTF8.html, в котором весь текст корректно отображается. Если кликнуть по странице правой кнопкой мыши и в контекстном меню выбрать "Просмотр кода страницы", то увидим весь наш текст, который был туда записан. Никаких лишних символов там не появилось.