Какая кодировка используются в Lua?

Страницы: 1 2 След.
RSS
Какая кодировка используются в Lua?
 
Какая кодировка используются в Lua?
Windows - 1251?
Например, если терминал будет установлен на английскую версию винды, терминал тоже будет отдавать строки в Windows - 1251 или в системной кодировке?
 
Цитата
Александр написал:
Какая кодировка используются в Lua?
Мы рекомендуем использовать кодировку ANSI
Для кирилицы выбирать Windows - 1251
 
Цитата
Sergey Gorokhov написал:
Цитата
Александр написал:
Какая кодировка используются в Lua?
Мы рекомендуем использовать кодировку ANSI
Для кирилицы выбирать Windows - 1251
Я бы хотел узнать о поведении терминала, где например нет кирилицы?
 
Цитата
Александр написал:
Я бы хотел узнать о поведении терминала, где например нет кирилицы?
терминал тут не причем, если в Windows нет кирилицы то и в QUIK ее не будет
 
Цитата
Sergey Gorokhov написал:
Цитата
Александр написал:
Я бы хотел узнать о поведении терминала, где например нет кирилицы?
терминал тут не причем, если в Windows нет кирилицы то и в QUIK ее не будет
Квик не будет работать на системе, где не установлена кирилица?
 
Цитата
Александр написал:
Квик не будет работать на системе, где не установлена кирилица?

Конечно будет, на английском же языке.
 
Цитата
Sergey Gorokhov написал:
Цитата
Александр написал:
Квик не будет работать на системе, где не установлена кирилица?

Конечно будет, на английском же языке.
В какой кодировке будут строки, если вызвать lua_tolstring для преобразования в unicode?
 
Цитата
Александр написал:
В какой кодировке будут строки, если вызвать lua_tolstring для преобразования в unicode?

Мы не проводили исследований на этот счет.
 
Цитата
Sergey Gorokhov написал:
Цитата
Александр написал:
В какой кодировке будут строки, если вызвать lua_tolstring для преобразования в unicode?

Мы не проводили исследований на этот счет.
Вот это поворот :) Проведите, ответьте :)
 
Александр,
Зачем?
Нам нет смысла отдельно проводить исследования.
Если Вам интересен ответ, Вы можете узнать его самостоятельно, либо попробовать поискать ответ в интернете.
Lua разработан не нами, наверняка на форумах которые ему посвящены Вы найдете что то нужно.
 
Цитата
Sergey Gorokhov написал:
Александр,
Зачем?
Нам нет смысла отдельно проводить исследования.
Если Вам интересен ответ, Вы можете узнать его самостоятельно, либо попробовать поискать ответ в интернете.
Lua разработан не нами, наверняка на форумах которые ему посвящены Вы найдете что то нужно.
Странный ответ. При чем здесь lua? Терминал же сохраняет строки для дальнейшего использования в луа?
Вот я хочу узнать, что вы туда записываете.
 
Цитата
Александр написал:
В какой кодировке будут строки, если вызвать lua_tolstring для преобразования в unicode?
А как вы вызовете lua_tolstring для преобразования в unicode? Она просто вернет пойнтер на строку в хранилище и все, никаких преобразований не случится. Аналогично lua_pushstring ничего не будет преобразовывать, как дали ей массив байтов, так она их  в хранилище и засунет. Отсюда вывод: в какой кодировке скормили, в той и назад получите. Сравнение строк на равенство тоже побайтово делается. Единственное - это сравнение на неравенство, луа вызывает strcoll и поэтому правильный вопрос к арке будет такой: какую локаль устанавливает квик при старте? Мое предположение - locale("").
 
Цитата
Александр написал:
Странный ответ. При чем здесь lua? Терминал же сохраняет строки для дальнейшего использования в луа?Вот я хочу узнать, что вы туда записываете.
Странный вопрос, Вы же спрашиваете про Lua, а не про терминал QUIK.
О tostring нам известно не больше чем то что написано в официальной документации на сайте lua.org
Если интересует в какой кодировке сервер QUIK отправляет данные на терминал, то в ANSI.
 
Цитата
Anton написал:
Цитата
Александр написал:
В какой кодировке будут строки, если вызвать lua_tolstring для преобразования в unicode?
А как вы вызовете lua_tolstring для преобразования в unicode? Она просто вернет пойнтер на строку в хранилище и все, никаких преобразований не случится. Аналогично lua_pushstring ничего не будет преобразовывать, как дали ей массив байтов, так она их  в хранилище и засунет. Отсюда вывод: в какой кодировке скормили, в той и назад получите. Сравнение строк на равенство тоже побайтово делается. Единственное - это сравнение на неравенство, луа вызывает strcoll и поэтому правильный вопрос к арке будет такой: какую локаль устанавливает квик при старте? Мое предположение - locale("").
Вопрос заключается в какой кодировке будет строка? В ansi не написано в какой кодировке будет.
Если это будет в системной кодировке, то не понятно как быть с кириллическими символами.
Если в Windows - 1251, то понятно как дальше преобразовать в уникод.
Так что вопрос заключается в том, в какой кодировке изначально строка попадает в таблицу луа - в системной или windows - 1251 не зависимо от системной кодировки.
 
Цитата
Sergey Gorokhov написал:
Цитата
Александр написал:
Странный ответ. При чем здесь lua? Терминал же сохраняет строки для дальнейшего использования в луа?Вот я хочу узнать, что вы туда записываете.
Странный вопрос, Вы же спрашиваете про Lua, а не про терминал QUIK.
О tostring нам известно не больше чем то что написано в официальной документации на сайте lua.org
Если интересует в какой кодировке сервер QUIK отправляет данные на терминал, то в ANSI.
Кодировка то какая всегда windows-1251? Или зависит от настроек сервера?
 
Цитата
Александр написал:
в какой кодировке изначально строка попадает в таблицу луа
Я всю жизнь CP_ACP для преобразований в-из анси использую и никто еще не жаловался.
 
Цитата
Anton написал:
Цитата
Александр написал:
в какой кодировке изначально строка попадает в таблицу луа
Я всю жизнь CP_ACP для преобразований в-из анси использую и никто еще не жаловался.
Хорошо. Если кодировка Windows - 1251, то в терминале где нет кирилицы, будут проблемы.
А сервер квик не знает, какая кодировка у клиента на компьютере есть, а какой нету.
 
Цитата
Александр написал:
Кодировка то какая всегда windows-1251? Или зависит от настроек сервера?

зависит от настроек сервера, но как правило большая часть (или вообще все) используют кодировку ANSI с кодовой таблицей Windows-1251
 
Цитата
Александр написал:
Хорошо. Если кодировка Windows - 1251, то в терминале где нет кирилицы, будут проблемы.
Вы имеете ввиду OS где нет кирилицы.
Да будут проблемы.
Но они как правило решаются настройкой "язык для программ, не поддерживающих юникод" = русский
Цитата
Александр написал:
А сервер квик не знает, какая кодировка у клиента на компьютере есть, а какой нету.
Естественно не знает
 
Цитата
Sergey Gorokhov написал:
Но они как правило решаются настройкой "язык для программ, не поддерживающих юникод" = русский
Или, как йже было сказано, не использовать русский там где нет русской кирилицы
терминал QUIK умеет переключаться на английский
 
Цитата
Sergey Gorokhov написал:
Цитата
Sergey Gorokhov написал:
Но они как правило решаются настройкой "язык для программ, не поддерживающих юникод" = русский
Или, как йже было сказано, не использовать русский там где нет русской кирилицы
терминал QUIK умеет переключаться на английский
В этом случае какая кодировка будет? Например в таблице инструментов есть поле name - наименование инструмента и оно может быть на русском языке.
Тут что будет?
 
Александр,
Вам уже дали ответ, какой еще вариант вам нужен?
Везде используется ANSI
Всегда
Во всех данных
во всех языках.
 
Цитата
Sergey Gorokhov написал:
Александр,
Вам уже дали ответ, какой еще вариант вам нужен?
Везде используется ANSI
Всегда
Во всех данных
во всех языках.
Всегда и везде будет кодировка windows-1251 или она зависит от терминала (его языка), ос (наличие кирилицы или нет) или сервека квик?
Я так знаю, что все строки в ANSI. Вопрос изначально был: кодировка строк windows-1251 или зависит от ос (CP_ACP) или сервера квик?
 
Цитата
Александр написал:
Всегда и везде будет кодировка windows-1251 или она зависит от терминала (его языка), ос (наличие кирилицы или нет) или сервека квик?

Вы задаете одни и теже вопросы по кругу.
Вам уже дали ответ:
Цитата
Sergey Gorokhov написал:
зависит от настроек сервера, но как правило большая часть (или вообще все) используют кодировку ANSI с кодовой таблицей Windows-1251
 
Цитата
Sergey Gorokhov написал:
Цитата
Александр написал:
Всегда и везде будет кодировка windows-1251 или она зависит от терминала (его языка), ос (наличие кирилицы или нет) или сервека квик?

Вы задаете одни и теже вопросы по кругу.
Вам уже дали ответ:
Цитата
Sergey Gorokhov написал:
зависит от настроек сервера, но как правило большая часть (или вообще все) используют кодировку ANSI с кодовой таблицей Windows-1251
Получается, что в терминале на английском языке на английской винде, в таблице текущих параметров в поле бумага - будет аракадабра?
 
Цитата
Александр написал:
Получается, что в терминале на английском языке на английской винде, в таблице текущих параметров в поле бумага - будет аракадабра?
Вы задаете одни и теже вопросы по кругу.
Вам уже дали ответ:
Цитата
Sergey Gorokhov написал:
Да будут проблемы.Но они как правило решаются настройкой "язык для программ, не поддерживающих юникод" = русский
 
Цитата
Sergey Gorokhov написал:
Цитата
Александр написал:
Получается, что в терминале на английском языке на английской винде, в таблице текущих параметров в поле бумага - будет аракадабра?
Вы задаете одни и теже вопросы по кругу.
Вам уже дали ответ:
Цитата
Sergey Gorokhov написал:
Да будут проблемы.Но они как правило решаются настройкой "язык для программ, не поддерживающих юникод" = русский
и
Цитата
Sergey Gorokhov написал:
Цитата
Sergey Gorokhov написал:
Но они как правило решаются настройкой "язык для программ, не поддерживающих юникод" = русский
Или, как йже было сказано, не использовать русский там где нет русской кирилицы
терминал QUIK умеет переключаться на английский
 
Цитата
Sergey Gorokhov написал:
Цитата
Sergey Gorokhov написал:
 
Цитата
Александр  написал:
Получается, что в терминале на английском языке на английской винде, в таблице текущих параметров в поле бумага - будет аракадабра?
Вы задаете одни и теже вопросы по кругу.
Вам уже дали ответ:
 
Цитата
Sergey Gorokhov  написал:
Да будут проблемы.Но они как правило решаются настройкой "язык для программ, не поддерживающих юникод" = русский
и
Цитата
Sergey Gorokhov написал:
 
Цитата
Sergey Gorokhov  написал:
Но они как правило решаются настройкой "язык для программ, не поддерживающих юникод" = русский
Или, как йже было сказано, не использовать русский там где нет русской кирилицы
терминал QUIK умеет переключаться на английский
Отображение значений полей зависит от языка терминала?  Не всегда есть возможность переключатся на язык для программ, не поддерживающих уникод.
Терминал не поддерживает уникод в 2020 году. Получается терминал в китайской винде работать не будет, даже его английская версия?
Значения полей не верно будут отображаться. Так получается?
 
Цитата
Александр написал:
Отображение значений полей зависит от языка терминала?
Логично что если в настройках терминала выбран английский то и интерфейс и все значения будут на английском.
Цитата
Александр написал:
Получается терминал в китайской винде работать не будет, даже его английская версия?
К сожалению у нас нет китайской винды чтобы проверить. Однако английская раскладка поддерживается во всех локализациях Windows.
Цитата
Александр написал:
Значения полей не верно будут отображаться. Так получается?
Вопрос не понятен, что значит "не верно"?
 
Цитата
Sergey Gorokhov написал:
К сожалению у нас нет китайской винды чтобы проверить.
Кстати на польской Windows, QUIK на английском работает прекрасно.
 
Цитата
Sergey Gorokhov написал:
Цитата
Александр написал:
Отображение значений полей зависит от языка терминала?
Логично что если в настройках терминала выбран английский то и интерфейс и все значения будут на английском.
Цитата
Александр написал:
Получается терминал в китайской винде работать не будет, даже его английская версия?
К сожалению у нас нет китайской винды чтобы проверить. Однако английская раскладка поддерживается во всех локализациях Windows.
Цитата
Александр написал:
Значения полей не верно будут отображаться. Так получается?
Вопрос не понятен, что значит "не верно"?
В русском терминале название акции - "Газпром", а в английском - она будет называться по-другому?
 
Цитата
Александр написал:
В русском терминале название акции - "Газпром", а в английском - она будет называться по-другому?
Вы задаете одни и теже вопросы по кругу.
Вам уже дали ответ:
Цитата
Sergey Gorokhov написал:
Логично что если в настройках терминала выбран английский то и интерфейс и все значения будут на английском.
 
Цитата
Sergey Gorokhov написал:
Цитата
Александр написал:
В русском терминале название акции - "Газпром", а в английском - она будет называться по-другому?
Вы задаете одни и теже вопросы по кругу.
Вам уже дали ответ:
 
Цитата
Sergey Gorokhov написал:
Логично что если в настройках терминала выбран английский то и интерфейс и все значения будут на английском.
Ответить прямо религия запрещает? Мне ваши ответы не понятны, поэтому задаю уточнящие вопросы.
Есть ли квик джуниор с интерфейсом на английском языке для теста?
 
tostring работает со строками в коде ASCII (American Standart Code for Inmormation Interchange)  
вернее ASCIIZ
 
на самом деле переменная в которую записываем строку не содержит указатель на строку,
а содержит хэш  строки.
поэтому сравнение строк в луа делается быстро как и для числе,
так как сравниваются числа  хэш
 
tostring вообще-то  все  равно какая кодировка
 
трындец, уши вянут от ваших вендузяцких лозунгов
https://www.lua.org/manual/5.3/manual.html#2.1
Код
 Lua is 8-bit clean: strings can contain any 8-bit value, including embedded zeros ('\0'). Lua is also encoding-agnostic; it makes no assumptions about the contents of a string.
 
Цитата
Александр написал:
Ответить прямо религия запрещает? Мне ваши ответы не понятны, поэтому задаю уточнящие вопросы.
Что именно не понятно во фразе "интерфейс и все значения будут на английском"?
Цитата
Александр написал:
В русском терминале название акции - "Газпром", а в английском - она будет называться по-другому?
Хорошо, отвечаем прямо, да будет по другому, а если точнее по английски, а если еще точнее то GAZPROM.
такой ответ понятен?

Цитата
Александр написал:
Есть ли квик джуниор с интерфейсом на английском языке для теста?
отдельного терминала QUIK на английском языке не существует.
Есть просто терминал, и в нем есть просто настройка, которую просто надо поменять.
меню Система - Настройки - Языковые установки.
Нюанс в том, что не каждый сервер брокера поддерживает английский, это можно уточнить у брокера.
 
Цитата
Николай Камынин написал:
tostring работает со строками в коде ASCII (American Standart Code for Inmormation Interchange)  
вернее ASCIIZ
Абсолютно неверное утверждение. В случае автоматического преобразования числа в строку да, получается ASCIIZ (а можно сказать, что получается utf-8 или win-1251 или что угодно, т.к. первая страница у всех codepage одинаковая, если не учитывать экзотику), но в случае строки возвращается строка как она есть, ровно в том виде, в каком ее туда засунули, в том числе со внутренними нулями (что автоматически отвергает ASCIIZ и, кстати, позволяет при некоторой осторожности впихнуть даже utf-16).
 
Цитата
Sergey Gorokhov написал:
Цитата
Александр написал:
Ответить прямо религия запрещает? Мне ваши ответы не понятны, поэтому задаю уточнящие вопросы.
Что именно не понятно во фразе "интерфейс и все значения будут на английском"?
Цитата
Александр написал:
В русском терминале название акции - "Газпром", а в английском - она будет называться по-другому?
Хорошо, отвечаем прямо, да будет по другому, а если точнее по английски, а если еще точнее то GAZPROM.
такой ответ понятен?

Цитата
Александр написал:
Есть ли квик джуниор с интерфейсом на английском языке для теста?
отдельного терминала QUIK на английском языке не существует.
Есть просто терминал, и в нем есть просто настройка, которую просто надо поменять.
меню Система - Настройки - Языковые установки.
Нюанс в том, что не каждый сервер брокера поддерживает английский, это можно уточнить у брокера.
Квик джуниор, который подключается к вашему демо серверу, поддерживает английский?
 
Цитата
Александр написал:
Квик джуниор, который подключается к вашему демо серверу, поддерживает английский?

Да поддерживает
 
Цитата
Anton написал:
Цитата
Николай Камынин написал:
tostring работает со строками в коде ASCII (American Standart Code for Inmormation Interchange)  
вернее ASCIIZ
Абсолютно неверное утверждение. В случае автоматического преобразования числа в строку да, получается ASCIIZ (а можно сказать, что получается utf-8 или win-1251 или что угодно, т.к. первая страница у всех codepage одинаковая, если не учитывать экзотику), но в случае строки возвращается строка как она есть, ровно в том виде, в каком ее туда засунули, в том числе со внутренними нулями (что автоматически отвергает ASCIIZ и, кстати, позволяет при некоторой осторожности впихнуть даже utf-16).
Цитата
Николай Камынин написал:
tostring вообще-то  все  равно какая кодировка
 
поясняю для тех кто в танке
--------------------------
текст в любой кодировке - это массив байт
конец массива обозначается нулевым байтом,
поэтому в массивах с текстом запрещен нулевой байт
но если в массиве байтов нет нуля то это может быть массив не текста
---------------------
знание кодировки требуется лишь генератору символов на устройстве отображения
------------------
поэтому если отображения нет , то кодировка не имеет значение, если все строки текста в программе имеют одинаковую кодировку
то с ними можно работать как с массивами байт
----------------------
оператору tostring  вообще не требуется знать кодировки так как его задача заменить хеш указателем на  массив байт с нулем в конце
 
Цитата
Николай Камынин написал:

текст в любой кодировке - это массив байт
конец массива обозначается нулевым байтом,
поэтому в массивах с текстом запрещен нулевой байт
но если в массиве байтов нет нуля то это может быть массив не текста
Ерунда.

пример - строки луа.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
Николай Камынин написал:
текст в любой кодировке - это массив байт
Вообще все в компьютере это массив байт. Остальное все неверно. Ноль в конце это чисто сишная фишка, в паскале их нет например. Строка это не байты, а codepoints, каждая из которых может быть больше байта (до четырех например в utf8). Если вы разрежете строку посреди codepoint, обе половины уже не будут строками или, в лучшем случае, будут битыми строками. Отображение это вообще отдельная тема, там не только codepoints действуют, композиция включается, а еще куча параметров конкретного шрифта. Знание кодировки нужно для любых действий со строкой, отличных от простого копирования. Это если говорить о строках, а не о кучке мусора с приделанным ноликом. Прежде чем пояснять, стоит все же хоть немного тему изучить.
 
Цитата
Anton написал:
Цитата
Николай Камынин написал:
текст в любой кодировке - это массив байт
Вообще все в компьютере это массив байт. Остальное все неверно. Ноль в конце это чисто сишная фишка, в паскале их нет например. Строка это не байты, а codepoints, каждая из которых может быть больше байта (до четырех например в utf8). Если вы разрежете строку посреди codepoint, обе половины уже не будут строками или, в лучшем случае, будут битыми строками. Отображение это вообще отдельная тема, там не только codepoints действуют, композиция включается, а еще куча параметров конкретного шрифта. Знание кодировки нужно для любых действий со строкой, отличных от простого копирования. Это если говорить о строках, а не о кучке мусора с приделанным ноликом. Прежде чем пояснять, стоит все же хоть немного тему изучить.
ну почитайте хотя бы документацию:
цитата:
------------------------------------
lua_tolstring[-0, +0, e]const char *lua_tolstring (lua_State *L,
                          int index,
                          size_t *len);Конвертирует Lua значение по заданному индексу в C строку. Если len не является NULL, она также устанавливает указатель *len с длиной строки. Lua значение должно быть строкой или числом; в противном случае функция возвращает NULL. Если значение является числом, то lua_tolstring также изменяет действительное значение в стеке на строку. (Такое изменение дезориентирует функцию lua_next, когда lua_tolstring применяется для ключей во время обхода таблицы.)

lua_tolstring возвращает полностью согласованный, внутри Lua состояния, указатель на строку.
В этой строке всегда имеется нуль ('\0'), после последнего символа (как в C).
 
Цитата
Николай Камынин написал:
ну почитайте хотя бы документацию:
да...да ... только до конца параграфа :)

https://www.lua.org/manual/5.3/manual.html#lua_tolstring
 
Цитата
Александр написал:
Терминал не поддерживает уникод в 2020 году.
и про линукс и макос они тоже не слышали ... на данном историческом этапе ...
бесплатно же ... смирись :)
 
Николай Камынин, вы выдергиваете особенность реализации и позиционируете ее как отличительный признак строки вообще. Луа добавляет ноль чисто для удобства и даже можно сказать чисто технически, потому что есть lua_pushlstring, принимающая размер, и вы можете сделать так
Код
const char hello[] = "hello";
lua_pushlstring(s, hello, 4); // actually stores "hell"
Если бы луа не добалял ноль, то в следующем вызове
Код
const char * pstr = lua_tostring(s, -1);
вы бы получили "hell" без нуля на конце и крэшнули бы приложение, пытаясь работать с ним сишными функциями. Именно поэтому луа ноль и добавляет, чтобы всегда возвращать терминированную строку. А теперь следите за руками. В сях я пишу
Код
   const wchar_t str1[] = L"HELLO";
   const wchar_t str2[] = L"DOLLY";
   lua_getglobal(s, "strcat");
   lua_pushlstring(s, reinterpret_cast<const char *>(str1), ::wcslen(str1) * sizeof(wchar_t));
   lua_pushlstring(s, reinterpret_cast<const char *>(str2), ::wcslen(str2) * sizeof(wchar_t));
   lua_call(s, 2, 1);
   size_t len;
   const wchar_t * pstr = reinterpret_cast<const wchar_t *>(lua_tolstring(s, -1, &len));
   ::std::wstring str(pstr, len);
в луа пишу
Код
function strcat(s1, s2) return s1 .. s2 end
и внезапно получаю (широкую!) строку "HELLODOLLY". То есть луа не только сохранил строки в utf-16 и потом правильно вернул, но и правильно их склеил даже. Почему? А потому что плевал он на нолики в конце. У него есть сохраненная длина строки и по ней он ориентируется. Для сравнения сишный strcat (который по ноликам ориентируется) на таких строках сфейлит, вернет "HD", потому что тут после каждого байта ноль идет. Все это к чему. К тому, что в луа строки это тупо мусор заданной длины (даже без нолика), никакой семантики луа им не придает. А где должен бы придавать, там фейлит. Например, если я эту строчку "DOLLY" сделаю ключом в таблице (из сей), луа это слопает на ура. Но вот из самого луа я этого ключа не увижу (через перебор всех ключей только), потому что кодировка не совпадает. О чем и говорил выше, любая именно строковая операция кроме копирования требует знания кодировки. Как только нужна семантика, тут луа умывает руки.
 
Возникла проблема. Нас C написал библиотеку DLL. В ней функция для вызова из скрипта Lua. Библиотека подгружается, функция вызывается и нормально работает. Эта функция создаёт окна в отдельных потоках Windows, окна выводят cтроковую информацию API функциями Windоows(OutputDebugString, MessageBox), которые естественно корректно выводят русский текст при работе в простом приложении, но в DLL они выдают полную хрень из-за разных кодировок в среде Windows по умолчанию и в QUIK. Пробовал перед вызовом функций устанавливать локали по умолчанию через GetUserDefaultLocaleName и GetSystemDefaultLocaleName(обе возвращают "ru-Ru", а QUIK через _wsetlocale(LC_ALL, NULL) даёт локаль "C"), а потом вызывать функции вывода информации, после чего обратно возвращал локаль "C", чтобы QUIK работал не замечая временную смену локали. Не помогло!!! Как можно ещё выкрутиться? Изначально указать компилятору как-то(как?) закодить русский текст в кодировке QUIK-а? Писать строки через "\код" - не вариант, да и коды надо как-то генерить в кодировке QUIK-а. Пока что-то совсем на ум ничего не идёт.
Страницы: 1 2 След.
Читают тему
Наверх