Live dc++ forum
Форма входа
Логин:
Пароль:
Главная | lua и unicode - Форум | Суббота, 27.05.2017, 16:58
[ Новые сообщения · Участники · Правила форума · Поиск
Страница 1 из 11
Форум » >> » DC++ » lua и unicode
lua и unicode
KiarДата: Воскресенье, 11.07.2010, 17:54 | Сообщение # 1
Лейтенант
Сообщений: 42
Репутация: 0
Статус: Offline
Как решить проблему с юникодом в скриптах?) по умолчанию он работает в utf-8, и при использовании функций string.len и string.sub над кириллицей естественно выдает кракозябру. читал что можно воспользоваться какимито дополнительными библиотеками, но как так и не понял(

 
SMTДата: Воскресенье, 11.07.2010, 21:17 | Сообщение # 2
Генерал-лейтенант
Сообщений: 514
Репутация: 28
Статус: Offline
встроенная библиотека lua не умеет обрабатывать utf-8.
нужно или пересобрать lua, доработав все встроенные функции поддержкой utf, или собрать свою DLL с функциями, благо greylink позволяет подгружать LUA-функции из дополнительных DLL

например, для strlen у меня получилась такая функция на C++:

Code

int ustring_strlen(lua_State *L) {
           const char* str = luaL_checkstring(L,1);
           int len = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
           lua_pushinteger(L, len-1);
           return 1;
}

код LUA:

Code
len = ustring.strlen("Привет!")
DC():MessageBox("ustring.strlen(\"Привет!\")="..len, "test", "ok", "info")

результат:

 
KiarДата: Понедельник, 12.07.2010, 13:27 | Сообщение # 3
Лейтенант
Сообщений: 42
Репутация: 0
Статус: Offline
а немного поподробнее можно? cry
очень нужен сабстр.


 
SMTДата: Понедельник, 12.07.2010, 13:38 | Сообщение # 4
Генерал-лейтенант
Сообщений: 514
Репутация: 28
Статус: Offline
Quote (Kiar)
немного поподробнее можно?
очень нужен сабстр.

доп функции нужно писать самому на c++. захочешь написать - подскажу, если будут вопросы.
тебе надо всего-то разобраться с одной из библиотек boost::regex или pcre
и сделать обёртку вокруг вызова одной из этих библиотек
 
KiarДата: Понедельник, 12.07.2010, 15:32 | Сообщение # 5
Лейтенант
Сообщений: 42
Репутация: 0
Статус: Offline
да мне бы готовую библиотеку, я е настолько мощный программер) можно сказать начинающий happy
попробывал ICU4Lua - оно затребовало кучу библиотек, которые коекак нашел, засунул, и в конечном счете ничего не заработало =( не понимаю как правильно запускать их функции, через icu.ustring.len (msg) пишет что не понимает что за icu такое.


 
SMTДата: Понедельник, 12.07.2010, 22:01 | Сообщение # 6
Генерал-лейтенант
Сообщений: 514
Репутация: 28
Статус: Offline
собрал (32/64)
чего сложного - скачать либы и собрать готовый проект
 
SMTДата: Понедельник, 12.07.2010, 22:04 | Сообщение # 7
Генерал-лейтенант
Сообщений: 514
Репутация: 28
Статус: Offline
тестовая программа:

DC():PrintDebug(icu._VERSION)
DC():PrintDebug(icu.defaultencoding())

пишет в лог

[2010-07-12 22:03] 4.2.1
[2010-07-12 22:03] ibm-5347_P100-1998

 
SMTДата: Понедельник, 12.07.2010, 22:34 | Сообщение # 8
Генерал-лейтенант
Сообщений: 514
Репутация: 28
Статус: Offline
хех, пока кроме VERSION ничего и не работает ))
надо копать дальше
 
SMTДата: Понедельник, 12.07.2010, 22:53 | Сообщение # 9
Генерал-лейтенант
Сообщений: 514
Репутация: 28
Статус: Offline
а причина вот в чём:
в самом начале загрузки библиотеки они сделали вызов require "icu/ustring.lua"
и если этого файла нет, всё падает вместе с клиентом. причём ни в каком дистрибе этого файла нет - сделал его пустым
Прикрепления: icu4lua.rar(51Kb)
 
KiarДата: Суббота, 24.07.2010, 17:15 | Сообщение # 10
Лейтенант
Сообщений: 42
Репутация: 0
Статус: Offline
спасибо, все заработало) ok

Добавлено (24.07.2010, 17:15)
---------------------------------------------
наткнулся в мануале на функции
# ToUtf8(str)
# FromUtf8(str)
эм, что они делают?)


 
SMTДата: Суббота, 24.07.2010, 22:25 | Сообщение # 11
Генерал-лейтенант
Сообщений: 514
Репутация: 28
Статус: Offline
Quote (Kiar)
ToUtf8(str)
# FromUtf8(str)
эм, что они делают?)

конвертируют из utf-8 в windows(1251) и обратно
 
Форум » >> » DC++ » lua и unicode
Страница 1 из 11
Поиск:


В движке поковырялся LiveDC :p © 2017
Сделать бесплатный сайт с uCoz