在lcurses中的宽字符
2012-10-28 10:53:19
收藏:0
阅读:142
评论:2
在使用Lua的_lcurses_编程时,我注意到相同的代码在_lua_和_luajit_上运行方式不同(假设源代码以UTF-8存储):
local locale = os.setlocale('')
require 'curses'
curses.initscr()
curses.cbreak()
curses.echo(0)
curses.nl(0)
local stdscr = curses.stdscr()
stdscr:clear()
stdscr:mvaddstr(0,0,'--->English,')
stdscr:mvaddstr(1,0,'--->Español')
stdscr:mvaddstr(2,0,'--->Русский (Russian)')
stdscr:mvaddstr(3,0,'--->日本語 (Japanese)')
stdscr:refresh()
stdscr:getch()
curses.endwin()
print(locale)
在_luajit_上运行时,一切都是预期的,但在_plain lua_上,每个UTF-8字符都会变成看起来奇怪的序列:
--->English,
--->EspaM-CM-1ol
--->M-PM- M-Q~CM-Q~AM-Q~AM-PM-:M-PM-8M-PM-9 (Russian)
--->M-f~WM-%M-f~\M-,M-hM-*~^ (Japanese)
这是在UTF-8感知控制台中的Linux下运行的,使用en_US.UTF-8环境。我还查看了_lcurses_ rock所附带的_curses.so_,发现它使用了正确的_ncurses_库(支持宽字符):
$ readelf -a curses.so | grep NEEDED
0x00000001 (NEEDED) Shared library: [libncursesw.so.5]
0x00000001 (NEEDED) Shared library: [libc.so.6]
软件版本:
- lua 5.1.4
- luajit 2.0.0 beta7
- ncurses 5.9
- lcurses 6-2(从luarocks安装)
编辑:
我一开始忘了写的问题本身:
- 有人知道为什么会发生这种情况吗?
- 如何在普通的lua上运行?
点赞
用户4046468
为了使用原始的 UTF-8 文本,只需在程序开头添加一行:
os.setlocale('')
2014-09-16 13:01:55
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
标准 Lua 只处理 ASCII 字符。字符串可以包含非 ASCII 字符,但 Lua 不知道如何打印它们。LuaJIT 使用 [特殊扩展](http://luajit.org/extensions.html) 来处理 UTF-8 字符串。