Lua指令碼中使用Unicode

2021-07-01 21:55:12 字數 1428 閱讀 8953

如何在lua指令碼中使用unicode是本文要介紹的內容,主要是來學習unicodelua指令碼中如何使用,具體內容來看本文詳細內容講解。說說最近的幾個事情:

1、project採用lua,ui模組肯定是要徹底使用utf-16的,可是lua不支援,怎麼辦?最後好像是寫了userdata,可以將multibytes轉成utf-16儲存在這個userdata中;接著為了保證字串相同的userdata做key時是相同的,於是又新增了相應的避免重複功能;最後還為這個userdata在gc方面作了保證。

2、google:lua unicode,會發現乙份通過table使用unicode的文章傳得很廣,實際上很不實用——需要工具,字串不可讀。

3、魔獸世界的lua指令碼儲存格式為utf-8,他的指令碼中有一段是直接寫文字資訊的,所以這種儲存格式比較有利。

4、看過戰鎚ol的外掛程式,無意中看到類似   s = l"戰鎚ol"  的**,心想難道lua支援unicode了?試了一下發現沒有,於是覺得是不是他們的程式修改了lua的parser了。不久後的現在,腦袋終於開竅了。

其實不少實力派的前人早就強調過lua在unicode方面的解決方案了:lua string是乙個raw buffer,可以存放任意資料。這個說法雖然正確卻太抽象,因為他們都沒有交代過具體的實現手法。

我們想要的所謂支援unicodelua,到底是什麼意思呢,最基礎的大概就是能像c那樣,用l作為字串的字首,並能將字串賦值到變數上,就像上面的

s = l"戰鎚ol"

注意這句**,你看出什麼了嗎?再明確一些

s = l("戰鎚ol")

感謝lua這種可忽略的寫法,可以讓lua寫一些很漂亮的內容,除了string,還有table。

只要l是乙個函式,接受multibytes字串作為引數,轉化為utf-16,然後將utf-16的字串交給lua string,壓棧。

這裡要回頭說說最上面所說的project,我不需要userdata了,因為他可以是乙個lua string,相同的字串做key的同質性?gc?通通都交給lua string吧,這裡沒你的事了。

最後,貼一下**,收功

int utf8_to_utf16(lua_state* l)  

iconv_close(h);

lua_pushlstring(l, (char*)wstr, (4096-wn));

return 1;

} //here here

lua_register(l, "l", utf8_to_utf16);

Redis中使用lua指令碼

公司中的爬蟲專案作為乙個接盤來的專案,專案中大致流程是,把要抓取的資料匯入到redis中,然後不斷pop再去抓取。為了避免redis中的資料丟失,大哥採取的是先pop再將拿到的資料通過set的形式在redis中記錄下來。redis client redis.redis 127.0.0.1 decod...

在CEGUI中使用Lua指令碼入門

cegui所使用的指令碼是基於lua5.0.2 和tolua 1.06pre2 1的.介面的編寫很大一部分可以通過指令碼來實現.我們可以修改指令碼而不必重新編譯整個程式,這就為我們省去了好多時間去設計介面.目前的lua指令碼模組仍然處於初期的開發階段。它支援絕大多數的核心系統 基層的視窗類,不過,對...

Xaml中使用Unicode字元

xaml是xml的一種,通常用在wpf程式中。用xaml設計ui更簡單 xaml比其他的ui設計技術所需編碼更少 xaml設計的ui方便轉移 方便在其他環境提交。由於xaml是xml的乙個擴充套件,所以xaml中用unicode碼來表示字元的方式與xml相同。格式為 x 前三位固定為 x,後面四位代...