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
| а немного поподробнее можно? очень нужен сабстр.
|
|
|
|
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
| да мне бы готовую библиотеку, я е настолько мощный программер) можно сказать начинающий попробывал 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" и если этого файла нет, всё падает вместе с клиентом. причём ни в каком дистрибе этого файла нет - сделал его пустым
|
|
|
|
Kiar | Дата: Суббота, 24.07.2010, 17:15 | Сообщение # 10 |
Лейтенант
Сообщений: 42
Репутация: 0
Статус: Offline
| спасибо, все заработало) Добавлено (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) и обратно
|
|
|
|