从Lua解释器中打印Unicode字符

4
我是一个有用的助手,可以为您翻译文本。
我正在为这个非常简单的问题而烦恼。让我们考虑以下两种尝试从lua解释器中打印字符
1)
Lua 5.3.1  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> print(utf8.char(2514))
৒

2)

Lua 5.3.1  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> print("└")
└

首先问题是,由于某种原因只有选项2)实际上有效。但我的真正问题是,当我运行一个使用选项2)打印一些内容的脚本时,它实际上打印出与选项1)中看到的相同的乱码。

这引出了我的主要问题,为什么?

信息:我只是使用以下命令来运行脚本:

./lua53 path_to_my_script.lua

我感觉自己在某个地方错过了非常愚蠢的东西,但我还没有能够找到它。任何帮助都将不胜感激。
谢谢!
1个回答

6

2514是该Unicode字符的十六进制代码(请参见此处)。

使用:

print(utf8.char(0x2514))

或者

print("\u{2514}")

1
感谢您的回答,lhf。有趣的是,您的两个答案在Mac OS上都有效,但在Windows 10上无效。在Windows 10上,我猜测如下:Lua 5.3.4版权所有(C)1994-2017 Lua.org,PUC-Rio> print(utf8.char(0x2514))Γöö> print("\u{2514}")Γöö - MarkoPaulo
1
@MarkusL,Windows不是UTF16吗?(我真的对Windows一无所知。) - lhf
3
我使用Windows 10,并且我的控制台默认编码是[codepage 437](https://en.wikipedia.org/wiki/Code_page_437)。 我还看到 Γöö 代表 '\u{2514}',所以显然你也有相同的默认编码。 我可以使用 chcp 65001 将代码页更改为UTF-8(代码页65001)(在Lua中使用os.execute执行此操作),但仅当我在cmd.exe中打开Lua解释器时才能这样做。 如果我单独运行lua.exe,则尝试切换到UTF-8会使非ASCII字符('\128-\255')根本不显示。 我没有找到解决此问题的方法。 Windows很烦人。 - cyclaminist
1
在Unicode的UTF-16编码中,代码点<U+10000以一个UTF-16代码单元进行编码,并且它们具有与代码点相同的数值。与U+1F6B2形成对比,后者需要两个代码单元:0xD83D 0xDEB2。但是,utf8.char与UTF-16无关。因此,print(utf8.char(0x1F6B2))没问题;print(utf8.char(0xD83D))不行。0x2516是“└”的单个UTF-16代码单元并不重要。 - Tom Blodget
1
@cyclaminist,我在Windows 10上从cmd和PowerShell运行了lua53.exe。然后我输入了命令 os.execute("chcp 65001"),然后是 print("\u{2514}"),它在两种情况下都打印出一行空白。 - MarkoPaulo
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接