当试图运行像 https://github.com/asciimoo/drawille/blob/master/examples/rotating_cube.py
使用我的普通用户,我总是得到奇怪的字符,如
M-bM- ~@M-bM- ~@M-bM- ~@M-bM- ~@M-bM- ~@M-bM- ~@M-bM- ~@M-bM- ~@M-bM- ~@M-bM- ~@M-bM-!~OM-bM- ~IM-bM- ~IM-bM- ~IM-bM- ~IM-bM- ~IM-bM- ~IM-bM- ~IM-bM- ~IM-bM- ~IM-bM-
~IM-bM- ~IM-bM- ~IM-bM- ~IM-bM- ~IM-bM- ~IM-bM- ~IM-bM- ~IM-bM- ~IM-bM- ~IM-bM-!~GM-bM- ~@M-bM- ~@M-bM- ~@M-bM- ~@M-bM- ~@M-bM- ~@M-bM- ~@M-bM- ~@M-bM- ~@
M-bM- ~@M-bM- ~@M-bM- ~@M-bM- ~@M-bM- ~@M-bM- ~@M-bM- ~@M-bM- ~@M-bM- ~@M-bM- ~@M
使用root
运行时看起来很正常,我的终端在执行
python -c 'print unichr(0x28ff)'
要么
echo -e '\u285a'
和$ TERM都设置为xterm
,欢迎任何提示。
由于
答案 0 :(得分:0)
您的“普通用户”没有设置区域设置,以便ncurses看到它支持UTF-8编码。要查看差异,请以普通用户身份运行locale
命令,并以root身份运行时将其与输出进行比较。
顺便说一句, M
表示“meta”,表示具有第八(最重要)位集的字符。回到7位ASCII常见的日子,而8位字符相对较新,有些人决定特别对待它。如果未设置您的语言环境(即POSIX),那基本上是7位ASCII。
unctrl
的手册页中提到了部分内容(包括使用 M-
作为前缀)。
关于后续(依赖于不在问题中的信息),这是Python的一个老问题,我认为这是固定的。正如我在 python+ncurses: I can't display accents 中指出的那样,Python并没有真正区分 ncurses
和 ncursesw
基于 接口 ,但只有 名称 ,并且其他一些组件可能会在您之前加载错误的名称进入curses模块:
比这更复杂:python的加载“ncurses” 动态。
加载哪一个并不重要(但是它) 明确指定库名称。其他一些 包(如readline)单独加载ncurses库 - 并且他们还指定了库名。而不是抽象 填充到另一个(更容易更改)级别,它嵌入代码中。
如果初始化脚本更改为加载“ncursesw”,则加载python 可以使用ncursesw而无需进一步更改。有一些补丁 我在bug报告中提到的配置启用了 python这样做。那些是python的补丁当然......
(大约一年前,这是关于这个新闻组的讨论主题)。
答案 1 :(得分:0)
$ ll /home/snebel29/.pyenv/versions/*/lib/python*/lib-dynload/*cur*
-rwxr-xr-x 1 snebel29 snebel29 42620 Jan 28 2016 /home/snebel29/.pyenv/versions/2.6.6/lib/python2.6/lib-dynload/_curses_panel.so*
-rwxr-xr-x 1 snebel29 snebel29 254035 Jan 28 2016 /home/snebel29/.pyenv/versions/2.6.6/lib/python2.6/lib-dynload/_curses.so*
-rwxr-xr-x 1 snebel29 snebel29 42520 May 16 2015 /home/snebel29/.pyenv/versions/2.7.6/lib/python2.7/lib-dynload/_curses_panel.so*
-rwxr-xr-x 1 snebel29 snebel29 254661 May 16 2015 /home/snebel29/.pyenv/versions/2.7.6/lib/python2.7/lib-dynload/_curses.so*
-rwxr-xr-x 1 snebel29 snebel29 320512 Mar 15 11:50 /home/snebel29/.pyenv/versions/3.4.3/lib/python3.4/lib-dynload/_curses.cpython-34m.so*
-rwxr-xr-x 1 snebel29 snebel29 46244 Mar 15 11:50 /home/snebel29/.pyenv/versions/3.4.3/lib/python3.4/lib-dynload/_curses_panel.cpython-34m.so*
应指向libncursesw.so.5
$ ldd /home/snebel29/.pyenv/versions/3.4.3/lib/python3.4/lib-dynload/_curses.cpython-34m.so
linux-vdso.so.1 => (0x00007fffecad1000)
libncursesw.so.5 => /lib/x86_64-linux-gnu/libncursesw.so.5 (0x00007f868e9d0000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f868e7a7000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f868e589000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f868e1c4000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f868dfc0000)
/lib64/ld-linux-x86-64.so.2 (0x00007f868ee1b000)
并且以某种方式指向libncurses.so.5
,请参阅此处以获取我的2.7.6解释器,其中仍然是faling
$ ldd /home/snebel29/.pyenv/versions/2.7.6/lib/python2.7/lib-dynload/_curses.so
linux-vdso.so.1 => (0x00007ffcb3f60000)
libncurses.so.5 => /lib/x86_64-linux-gnu/libncurses.so.5 (0x00007feed55be000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007feed5395000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007feed5177000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007feed4db2000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007feed4bae000)
/lib64/ld-linux-x86-64.so.2 (0x00007feed59f5000)
但是我仍然无法理解图书馆工作的原因而不是其他原因,特别是为什么使用root
帐户运行会让它有效...