Кодирование, декодирование в mql5

 

Доброго дня! Прошу подсказать кого-нибудь, имеется ли на mql5 кодировщик/декодировщик utf-8/16

?

 
#property copyright "Copyright 2020, Malik Arykov"

#include <Arrays/ArrayString.mqh>

// флаги функции FileOpen
#define FILE_READ_UTF8 (int)(FILE_SHARE_READ|FILE_ANSI)
#define FILE_WRITE_UTF8 (int)(FILE_READ|FILE_WRITE|FILE_ANSI)
#define FILE_READ_UNICODE (int)(FILE_SHARE_READ|FILE_UNICODE)
#define FILE_WRITE_UNICODE (int)(FILE_READ|FILE_WRITE|FILE_UNICODE)

// -----------------------------------------------------------------------------
// Файловые функции
// -----------------------------------------------------------------------------
class UFile {
public:
    static string LoadText(string path, int flags, CArrayString *lines);
    static bool SaveText(string text, string path, int flags, bool reset);
    static bool SaveText(CArrayString *lines, string path, int flags, bool reset);
};

// -----------------------------------------------------------------------------
// Загрузить текстовый файл
// -----------------------------------------------------------------------------
static string UFile::LoadText(string path, int flags, CArrayString *lines = NULL) {
    
    string sdlm = "";
    string line, text;
    
    // загружаем текст по-строчно
    ResetLastError();
    uint codePage = (flags == FILE_READ_UNICODE) ? CP_ACP : CP_UTF8;
    if (MQLInfoInteger(MQL_TESTER)) flags |= FILE_COMMON;
    int file = FileOpen(path, flags, '\n', codePage);
    if(file != INVALID_HANDLE) {
        text = "";
        while(!FileIsEnding(file)) {
            line = FileReadString(file);
            if (lines != NULL) lines.Add(line);
            text += sdlm + line;
            sdlm = "\n";
        }
        FileClose(file);
    }
    
    // проверяем код ошибки
    int rcode = GetLastError();
    if (rcode != ERR_SUCCESS) {
        PrintFormat("%s / ERROR: %i / %s", __FUNCTION__, rcode, path);
    }
    
    return text;
}

// -----------------------------------------------------------------------------
// Сохранить текстовый файл (по умолчанию в UTF-8 с добавлением в конец файла)
// -----------------------------------------------------------------------------
static bool UFile::SaveText(string text, string path, 
    int flags = FILE_WRITE_UTF8, bool reset = false) {

    // если текст нужно переписать, то удаляем файл
    if (reset && FileIsExist(path)) FileDelete(path);

    // сохраняем текст
    ResetLastError();
    uint codePage = (flags == FILE_WRITE_UNICODE) ? CP_ACP : CP_UTF8;
    if (MQLInfoInteger(MQL_TESTER)) flags |= FILE_COMMON;
    int file = FileOpen(path, flags, '\t', codePage);
    if(file != INVALID_HANDLE && FileSeek(file, 0, SEEK_END)) {
        FileWriteString(file, text);
        FileClose(file);
    }

    // проверяем код ошибки
    int rcode = GetLastError();
    if (rcode != ERR_SUCCESS) {
        PrintFormat("%s / ERROR: %i / %s", __FUNCTION__, rcode, path);
    }

    return (rcode == ERR_SUCCESS);
}

// -----------------------------------------------------------------------------
// Сохранить массив строк в текстовый файл
// -----------------------------------------------------------------------------
static bool UFile::SaveText(CArrayString *lines, string path, int flags, bool reset = false) {
    
    string text = "";
    string sdlm = "";
    for (int j = 0; j < lines.Total(); j++) {
        text += sdlm + lines.At(j);
        sdlm = "\n";
    }
    return SaveText(text, path, flags, reset);
}
Причина обращения: