AwesomeWM 非 ASCII 字符无法显示

在我的 wibox 任务栏中,我有一个 wibox.widget.textbox,它的文本是使用 textbox:set_text 方法设置的。

文本来自于一个 bash 命令,它的输出是通过 io:popen() 接收的:

local fd = io.popen("sensors | grep -oP 'Physical\\s+id\\s+\\d+:\\s+\\+\\K[0-9.]+'")
local out = fd:read("*all")
fd:close()
temp_widget:set_text(out)

但是,out 包含一个非 ASCII 符号:度字符 °。

在我的任务栏中,这个字符显示为 �,它本身是一个 Unicode 字符:U+FFFD。因此我认为 awesome 支持 Unicode,那么为什么这个字符无法正确显示?

编辑:另外,作为一个副问题,我无法在输出中添加一个字符串。也就是说,如果我执行 temp_widget:set_text(out .. "foobar"),结果与 temp_widget:set_text(out) 相同。该如何附加一个字符串?

点赞
用户96588
用户96588

我相信 "�" 不一定是 U+FFFD,而是用于表示任何不在您使用的字体中的字符的通用替代字符。因此,问题可能只是字体支持的问题。例如,如果我访问一个包含度符号的随机网页,浏览器的标题栏会显示度符号。另一个可能性是,由于 Lua 字符串没有显示编码,您可能需要告诉小部件它应该假定输入的哪种编码。

至于连接字符串,您确定 out 没有以换行符结尾,导致后续的字符串被隐藏因为它超出了边界吗?无论是否匹配,grep 输出都以换行符结尾:

$ echo ab | grep -o a | xxd -pu
610a
2017-07-12 19:19:00
用户3250340
用户3250340

我通过从grep字符串中删除度标志并在lua中再次添加来解决了我的问题。因此,字体不是问题,也不是小部件假定编码不是Unicode。

** l0b0 ** 对于在结尾加上新行的解决方法是正确的,它解决了我的第二个问题。

2017-07-14 19:13:09