Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как на C++ сделать кодировку из utf-8 в нормальный текст?

YarProduction Ученик (132), открыт 9 часов назад
У меня есть программа на C++, в lbl выводит английские буквы, и шифрует русские в utf-8. Можно ли как-то и как раскодировать в русские буквы?
2 ответа
Артем Капралов Ученик (210) 9 часов назад
//кодировки
string Utf8_to_cp1251(const char* str)
{
string res;
int result_u, result_c;


result_u = MultiByteToWideChar(CP_UTF8,
0,
str,
-1,
0,
0);

if (!result_u)
return 0;

wchar_t* ures = new wchar_t[result_u];

if (!MultiByteToWideChar(CP_UTF8,
0,
str,
-1,
ures,
result_u))
{
delete[] ures;
return 0;
}


result_c = WideCharToMultiByte(
1251,
0,
ures,
-1,
0,
0,
0, 0);

if (!result_c)
{
delete[] ures;
return 0;
}

char* cres = new char[result_c];

if (!WideCharToMultiByte(
1251,
0,
ures,
-1,
cres,
result_c,
0, 0))
{
delete[] cres;
return 0;
}
delete[] ures;
res.append(cres);
delete[] cres;
return res;
}
Папизи Профи (878) 9 часов назад
#include <iconv.h>
#include <iostream>
#include <cstring>

std::string convert_utf8_to_utf16(const std::string& utf8) {
iconv_t conv = iconv_open("UTF-16LE", "UTF-8");
if (conv == (iconv_t)-1) {
perror("iconv_open");
return "";
}

size_t in_bytes_left = utf8.size();
size_t out_bytes_left = in_bytes_left * 2 + 2; // UTF-16 в два раза больше
char* in_buf = const_cast<char*>(utf8.c_str());
std::string utf16(out_bytes_left, '\0'); // резервируем память
char* out_buf = &utf16[0];

if (iconv(conv, &in_buf, &in_bytes_left, &out_buf, &out_bytes_left) == (size_t)-1) {
perror("iconv");
iconv_close(conv);
return "";
}

iconv_close(conv);
// Обрезаем выходную строку для правильного отображения
utf16.resize(utf16.size() - out_bytes_left);
return utf16;
}

int main() {
std::string utf8_string = u8"Привет, мир!";
std::string utf16_string = convert_utf8_to_utf16(utf8_string);

// Output utf16_string as needed...

return 0;
}
Похожие вопросы