Перевести текст из UTF8 в CP1251

vegas

Известный
Автор темы
648
461
Я получаю сообщения из телеграмм чата с ботом, и как бы все хорошо но пока не начну отправлять русские символы ибо они превращаются вот в это "\u041f\u0440\u0438\u0432\u0435\u0442"(Это слово "Привет"). Как мне перевести этот текст как я понял из формата UTF8 в CP1251? Много каких-то функций с разных форумов попробовал но не одна не помогла :P
 
Решение
Причем тут это, проблема в том что при входе Английской буквы в твою функцию cp_to_utf8 игра крашит
Сказал бы сразу

C++:
#include <string>
#include <vector>
#include <regex>
#include <charconv>

std::vector<std::string> split(const std::string& str, const std::string& delim) {
    std::vector<std::string> strings;
    size_t start;
    size_t end = 0;
    while ((start = str.find_first_not_of(delim, end)) != std::string::npos) {
        end = str.find(delim, start);
        strings.push_back(str.substr(start, end - start));
    }
    return strings;
}

std::uint32_t utf8_encode(char* out, uint32_t utf)
{
    if (utf <= 0x7F) {
        // Plain ASCII
        out[0] = (char)utf;
        out[1] = 0;
        return 1;
    }
    else...

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,808
Я получаю сообщения из телеграмм чата с ботом, и как бы все хорошо но пока не начну отправлять русские символы ибо они превращаются вот в это "\u041f\u0440\u0438\u0432\u0435\u0442"(Это слово "Привет"). Как мне перевести этот текст как я понял из формата UTF8 в CP1251? Много каких-то функций с разных форумов попробовал но не одна не помогла :P
использовать UTF-8 IO, и будет тебе счастье
 

vegas

Известный
Автор темы
648
461

zTechnology

Известный
1,101
486
Я получаю сообщения из телеграмм чата с ботом, и как бы все хорошо но пока не начну отправлять русские символы ибо они превращаются вот в это "\u041f\u0440\u0438\u0432\u0435\u0442"(Это слово "Привет"). Как мне перевести этот текст как я понял из формата UTF8 в CP1251? Много каких-то функций с разных форумов попробовал но не одна не помогла :P
C++:
std::string UTF8_to_CP1251(std::string const & utf8)
{
    if(!utf8.empty())
    {
        int wchlen = MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), utf8.size(), NULL, 0);
        if(wchlen > 0 && wchlen != 0xFFFD)
        {
            std::vector<wchar_t> wbuf(wchlen);
            MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), utf8.size(), &wbuf[0], wchlen);
            std::vector<char> buf(wchlen);
            WideCharToMultiByte(1251, 0, &wbuf[0], wchlen, &buf[0], wchlen, 0, 0);
 
            return std::string(&buf[0], wchlen);
        }
    }
    return std::string();
}
credits: https://www.cyberforum.ru/cpp-beginners/thread1249547.html
никогда не поздно научиться гуглить
 

vegas

Известный
Автор темы
648
461
C++:
std::string UTF8_to_CP1251(std::string const & utf8)
{
    if(!utf8.empty())
    {
        int wchlen = MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), utf8.size(), NULL, 0);
        if(wchlen > 0 && wchlen != 0xFFFD)
        {
            std::vector<wchar_t> wbuf(wchlen);
            MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), utf8.size(), &wbuf[0], wchlen);
            std::vector<char> buf(wchlen);
            WideCharToMultiByte(1251, 0, &wbuf[0], wchlen, &buf[0], wchlen, 0, 0);
 
            return std::string(&buf[0], wchlen);
        }
    }
    return std::string();
}
credits: https://www.cyberforum.ru/cpp-beginners/thread1249547.html
никогда не поздно научиться гуглить
C++:
regex_search(response.c_str(), res, regex("\"text\":\"(.+)\""));
string message = res[1];

SF->Log("\u041f\u0440\u0438\u0432\u0435\u0442");
SF->Log(res[1]);
SF->Log(UTF8_to_CP1251(res[1]));

1646474835936.png

Ничего не изменилось
 

vegas

Известный
Автор темы
648
461

zTechnology

Известный
1,101
486
у меня тоже самое что и у тебя. Только не работает скорее всего из-за того что я хочу изменить текст который получаю из вне плагина, а не указываю изначально где-то
напиши в вк/кинь под хайд полный код получения, попробую сделать готовый вариант для тебя