Другое С/С++ Вопрос - Ответ

У

Удалённый пользователь 123482

Гость
Помогите сконвертировать самповскую строку 1251 в utf-8 для последующего использования в imgui
C++:
ImGui::BulletText("Text: %s", SAMP::convert1251toUTF8(pTextLabel.m_pText).c_str());
C++:
std::string convert1251toUTF8(const char *szString) {
    if (szString == nullptr) {
        return std::string();
    }

    std::string szMultiByteString = szString;
    std::wstring szWideCharString;

    MultiByteToWideChar(
        1251, 0,
        szMultiByteString.data(), szMultiByteString.size(),
        szWideCharString.data(), szMultiByteString.size()
    );

    WideCharToMultiByte(
        65001, 0,
        szWideCharString.data(), szWideCharString.size(),
        szMultiByteString.data(), szWideCharString.size(),
        nullptr, nullptr
    );

    return szMultiByteString;
}

Screenshot_2.png


Screenshot_1.png
 

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
Помогите сконвертировать самповскую строку 1251 в utf-8 для последующего использования в imgui
C++:
ImGui::BulletText("Text: %s", SAMP::convert1251toUTF8(pTextLabel.m_pText).c_str());
C++:
std::string convert1251toUTF8(const char *szString) {
    if (szString == nullptr) {
        return std::string();
    }

    std::string szMultiByteString = szString;
    std::wstring szWideCharString;

    MultiByteToWideChar(
        1251, 0,
        szMultiByteString.data(), szMultiByteString.size(),
        szWideCharString.data(), szMultiByteString.size()
    );

    WideCharToMultiByte(
        65001, 0,
        szWideCharString.data(), szWideCharString.size(),
        szMultiByteString.data(), szWideCharString.size(),
        nullptr, nullptr
    );

    return szMultiByteString;
}

Посмотреть вложение 95279

Посмотреть вложение 95278
C++:
std::string szMultiByteString{ szString };
std::wstring szWideCharString;
szWideCharString.reserve(szMultiByteString.size() * 2);
MultiByteToWideChar(
    1251, 0,
    szMultiByteString.data(), -1,
    szWideCharString.data(), szMultiByteString.size()
);
szMultiByteString.reserve(szMultiByteString.size() * 4);
WideCharToMultiByte(
        65001, 0,
        szWideCharString.data(), -1,
        szMultiByteString.data(), szWideCharString.size(),
        nullptr, nullptr
);
 
У

Удалённый пользователь 123482

Гость
C++:
std::string szMultiByteString{ szString };
std::wstring szWideCharString;
szWideCharString.reserve(szMultiByteString.size() * 2);
MultiByteToWideChar(
    1251, 0,
    szMultiByteString.data(), -1,
    szWideCharString.data(), szMultiByteString.size()
);
szMultiByteString.reserve(szMultiByteString.size() * 4);
WideCharToMultiByte(
        65001, 0,
        szWideCharString.data(), -1,
        szMultiByteString.data(), szWideCharString.size(),
        nullptr, nullptr
);
Screenshot_3.png


Не работает 😕
 

Dark_Knight

Me, me and me.
Друг
4,062
2,077
Помогите сконвертировать самповскую строку 1251 в utf-8 для последующего использования в imgui
C++:
ImGui::BulletText("Text: %s", SAMP::convert1251toUTF8(pTextLabel.m_pText).c_str());
C++:
std::string convert1251toUTF8(const char *szString) {
    if (szString == nullptr) {
        return std::string();
    }

    std::string szMultiByteString = szString;
    std::wstring szWideCharString;

    MultiByteToWideChar(
        1251, 0,
        szMultiByteString.data(), szMultiByteString.size(),
        szWideCharString.data(), szMultiByteString.size()
    );

    WideCharToMultiByte(
        65001, 0,
        szWideCharString.data(), szWideCharString.size(),
        szMultiByteString.data(), szWideCharString.size(),
        nullptr, nullptr
    );

    return szMultiByteString;
}

Посмотреть вложение 95279

Посмотреть вложение 95278
30 секунд поиска в гугле.
 

Dark_Knight

Me, me and me.
Друг
4,062
2,077
@pMozze
https://github.com/ocornut/imgui/bl...f2cff29d15/backends/imgui_impl_win32.cpp#L380 замени на

C++:
case WM_CHAR:
        wchar_t wch;
        MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, (char*)&wParam, 1, &wch, 1);
        io.AddInputCharacter(wch);
        break;
Это тоже сделай.
Я пастил этот код. Он тоже не работает
Работает. Ты же не сказал, что не работает в инпате. В буллете все работает прекрасно. Не раз уже тестилось.
 
У

Удалённый пользователь 123482

Гость
@pMozze
https://github.com/ocornut/imgui/bl...f2cff29d15/backends/imgui_impl_win32.cpp#L380 замени на

C++:
case WM_CHAR:
        wchar_t wch;
        MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, (char*)&wParam, 1, &wch, 1);
        io.AddInputCharacter(wch);
        break;
И что мне это даст?
Во-первых это для Wnd Proc'а, чтобы в input'е отображалась кириллица при вводе, а во вторых в wParam символ в кодировке ANSI.
В третьих мне нужно сконвертировать строку сампа (у неё кодировка Windows-1251 насколько мне известно) в UTF-8

Ты же не сказал, что не работает в инпате.
На кой хуй мне инпут? Мне bullet нужен, я проверял - в нём не работает.
 

K_E_N_T

Новичок
9
0
Как правильно установить Visual Studio для написания SF скриптов и какую версию лучше использовать.
Я чайник и сижу над этим уже 4-й день с плешью на голове постоянно какие-то ошибки и не имею понятия на БХ гайдов по этому вообще нету.

 

frit

Известный
389
174
Как правильно установить Visual Studio для написания SF скриптов и какую версию лучше использовать.
Я чайник и сижу над этим уже 4-й день с плешью на голове постоянно какие-то ошибки и не имею понятия на БХ гайдов по этому вообще нету.

Видимо ты даже часа не просидел, ибо ответ можно было давно найти в гугле. Тебе не нужна разработка игр, тебе нужна "Разработка классических приложений на C++" и поставить две верхние галочки в сводке: "Пакет Windows SDK" и ещё какая-то галочка(не помню уже). Нажать кнопку "Установить".