当我使用 Lucida Console 作为字体在我的 Mac OS X 10.10 (Yosemite) 终端上运行它时,我得到如下所示的输出:
$ printf "%s\n" u+263a u+0020 u+26a0 u+0020 u+2622 | unicode-utf8
☺ ⚠ ☢
$ printf "%s\n" u+263a u+0020 u+26a0 u+0020 u+2622 | unicode-utf8 | odx
0x0000: E2 98 BA 20 E2 9A A0 20 E2 98 A2 0A ... ... ....
0x000C:
$ printf "%s\n" u+263a u+0020 u+26a0 u+0020 u+2622 | unicode-utf8 | utf8-unicode
(standard input):
0xE2 0x98 0xBA = U+263A
0x20 = U+0020
0xE2 0x9A 0xA0 = U+26A0
0x20 = U+0020
0xE2 0x98 0xA2 = U+2622
0x0A = U+000A
$
程序unicode-utf8、utf8-unicode 和odx 都是自制程序(Unicode 不是特别优雅),但它们允许我使用Unicode 进行分析工作。而且,至少在我的电脑上,所有三个符号都出现了。当它们没有被空格分隔时,三角形和辐射符号在屏幕上重叠(不像在浏览器中),这就是我添加空格的原因:
☺⚠☢
所以,我建议仔细查看您显示的脚本的输出。您可能会看到编码问题,或者 curses 库可能无法正确识别 UTF-8,或者......
当我使用 Python 2 运行时,我得到:
\u263a \u26a0 \u2622
\u263a \u26a0 \u2622
\u263a \u26a0 \u2622
\u263a \u26a0 \u2622
\u263a \u26a0 \u2622
\u263a \u26a0 \u2622
\u263a \u26a0 \u2622
\u263a \u26a0 \u2622
\u263a \u26a0 \u2622
\u263a \u26a0 \u2622
当我使用 Python 3 运行时,我得到:
☺ ☢
☺ ☢
☺ ☢
☺ ☢
☺ ☢
☺ ☢
☺ ☢
☺ ☢
☺ ☢
☺ ☢
这意味着我可以重现该问题,但它似乎是 Python 中的问题,而不是终端中的问题。
我跑了:
$ python3 so.26919799.py > py3.output
$ odx py3.output
输出的相关部分是:
0x1D60: 20 20 20 20 20 20 20 1B 5B 36 35 3B 31 48 20 20 .[65;1H
0x1D70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
* (5)
0x1DD0: 20 20 20 20 20 20 20 20 20 20 20 08 20 08 1B 5B . ..[
0x1DE0: 34 68 20 1B 5B 34 6C 1B 5B 48 0A E2 98 BA 20 20 4h .[4l.[H....
0x1DF0: 20 E2 98 A2 0D 0A E2 98 BA 20 20 20 E2 98 A2 0D ........ ....
0x1E00: 0A E2 98 BA 20 20 20 E2 98 A2 0D 0A E2 98 BA 20 .... ........
0x1E10: 20 20 E2 98 A2 0D 0A E2 98 BA 20 20 20 E2 98 A2 ........ ...
0x1E20: 0D 0A E2 98 BA 20 20 20 E2 98 A2 0D 0A E2 98 BA ..... ........
0x1E30: 20 20 20 E2 98 A2 0D 0A E2 98 BA 20 20 20 E2 98 ........ ..
0x1E40: A2 0D 0A E2 98 BA 20 20 20 E2 98 A2 0D 0A E2 98 ...... .......
0x1E50: BA 20 20 20 E2 98 A2 1B 5B 3F 31 6C 1B 3E 1B 5B . ....[?1l.>.[
0x1E60: 6D 0D 1B 5B 35 34 42 1B 5B 4B 1B 5B 36 35 3B 31 m..[54B.[K.[65;1
0x1E70: 48 1B 5B 32 4A 1B 5B 3F 34 37 6C 1B 38 0D 1B 5B H.[2J.[?47l.8..[
0x1E80: 3F 31 6C 1B 3E ?1l.>
0x1E85:
0x1D60: 表示文件中的字节偏移量。我的终端窗口是 110 宽和 65 深,所以输出产生了很多空白。 * (5) 行表示多 5 行,每行 16 个空格。然后您可以看到一些包含字节 E2 98 BA 和 E2 98 A2 的数据,但在这之间有三个空白,而不是您期望的 E2 98 A0。因此,警告符号的翻译被 Python 3 处理不当。