Ошибки, баги, вопросы - страница 3416
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Проблема может быть связана с тем, что в MetaEditor (который, вероятно, используется для написания торговых советников на платформе MetaTrader) функция FileWriteString с параметром FILE_WRITE|FILE_UNICODE|FILE_TXT использует UTF-16 кодировку, как вы правильно заметили.
Если вы хотите записать файл в формате UTF-8, вам следует использовать параметры FILE_WRITE|FILE_ANSI|FILE_TXT и просто убедиться, что ваш текст предварительно преобразован в UTF-8. В вашем первом примере кода, убедитесь, что ваш текст сохранен в кодировке UTF-8. Вот исправленный фрагмент кода:
Убедитесь, что ваш редактор текста сохраняет файл в UTF-8 перед его запуском.
Файл сохранён в UTF-8.
Независимо от того, запускаю я ME5 и MT5 в локали ru_RU.CP1251 или ru_RU.UTF-8,
пишет 1251 и в файл пишет в CP1251, если указать только FILE_ANSI и не указывать CP_UTF8.
Если указать и FILE_ANSI, и CP_UTF8, получаем файл нулевой длины и не получаем кода ошибки.
и для
поведение такое же.
Под Wine файлы в UTF-8 не пишутся. Файл нулевой длины, и ошибки тоже нет.
Если сделать так
пишется в UTF-16
это copy-paste исходника или вы по памяти перепечатали ?
просто там ошибки
это copy-paste исходника или вы по памяти перепечатали ?
просто там ошибки
Это демонстрационный пример, только закомментированные строки выкинул.
Какие ошибки?
Это демонстрационный пример, только закомментированные строки выкинул.
Какие ошибки?
компилятор вам про это наверняка сказал - там не строка передаётся а 1 символ
должно быть :
какой именно символ всё равно пока нет флага FILE_CSV
PS/ вы на С/C++ не писали очевидно ? это вредные ошибки, размерность съехала
компилятор вам про это наверняка сказал - там не строка передаётся а 1 символ
должно быть :
какой именно символ всё равно пока нет флага FILE_CSV
PS/ вы на С/C++ не писали очевидно ? это вредные ошибки, размерность съехала
Да, спасибо, не заметил. Даже в тех закомментированных строчках '\t' было.
Компилятор не ругался, странно.
Но на результат не влияет, UTF-8 всё равно не пишется, только или UTF-16, или CP-1251. И ошибку не выдаёт, просто 0 символов записано.
На С/C++ - мало и давно, ещё под MS-DOS.
Да, спасибо, не заметил. Даже в тех закомментированных строчках '\t' было.
Компилятор не ругался, странно.
Но на результат не влияет, UTF-8 всё равно не пишется, только или UTF-16, или CP-1251. И ошибку не выдаёт, просто 0 символов записано.
На С/C++ - мало и давно, ещё под MS-DOS.
и ещё флаг FILE_ANSI нужен, а FILE_UNICODE нет :-)
цитирую доки
FILE_UNICODE
64
Strings of UNICODE type (two byte symbols).
а UTF-8 - однобайтная кодировка :-)
и ещё флаг FILE_ANSI нужен, а FILE_UNICODE нет :-)
цитирую доки
FILE_UNICODE
64
Strings of UNICODE type (two byte symbols).
а UTF-8 - однобайтная кодировка :-)
Что FILE_UNICODE не нужен - это понятно, просто показвыаю, что и с ним не работает.
Насчёт однобайтной - очень и очень спорно )
Да и насчёт двухбайтной - как бы тоже )
Что FILE_UNICODE не нужен - это понятно, просто показвыаю, что и с ним не работает.
Насчёт однобайтной - очень и очень спорно )
Да и насчёт двухбайтной - как бы тоже )
вот магическое сочетание флагов, которые я использую :
int f=FileOpen(fileName,FILE_WRITE|FILE_SHARE_READ|FILE_TXT|FILE_ANSI,',',CP_UTF8);
FILE_TXT - говорит что это текст, FILE_ANSI - что однобайт, CP_UTF8 - предпочитаемая мной кодировка.
вот магическое сочетание флагов, которые я использую :
int f=FileOpen(fileName,FILE_WRITE|FILE_SHARE_READ|FILE_TXT|FILE_ANSI,',',CP_UTF8);
FILE_TXT - говорит что это текст, FILE_ANSI - что однобайт, CP_UTF8 - предпочитаемая мной кодировка.
Это всё понятно. Но! Это под виндой или под Wine? Что оно под виндой работает, я верю. А вот под Линуксом - не удалось заставить.
Возможно, какого-то пакета не хватает, у меня всё по минимуму стоит.под Линуксом - не удалось заставить.
MT4 и MT5 не работают одинаково с FileWriteString. Как пример, пришлось такой способ конвертации MT4->MT5 использовать, чтобы MT5 выдавал тот же результат, что и MT4.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Скрипты: StatsHTML
fxsaber, 2023.11.02 09:35
Однако, мне сразу стало понятно, в чем проблема, и быстро написал это. В ином же случае можно просто перебрать все возможные комбинации флагов. По комбинаторике их немного.
Возможно, имеет смысл проверить на линуксе MT4, а потом уже искать решение под MT5.