AwesomeWM非ascii字符不显示

时间:2017-07-12 17:38:19

标签: bash unicode lua awesome-wm

在我的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,那么为什么这个char没有正确显示?

编辑:另外,作为一个副作用,我不能在输出中附加一个字符串。 IE,如果我temp_widget:set_text(out .. "foobar"),则结果与temp_widget:set_text(out)相同。那么如何追加一个字符串?

2 个答案:

答案 0 :(得分:1)

我相信"�"对于任何不在您使用的字体中的字符,不一定是U + FFFD,也是通用替换字符。所以问题可能只是字体支持之一。例如,如果我转到random web page whose title contains a degree sign,则浏览器标题栏包含度数符号。另一种可能性是,由于 Lua strings do not have an explicit encoding ,您可能必须以某种方式告诉窗口小部件它应该为输入采用哪种编码。

对于串联字符串,您确定out不以换行结束,导致后续字符串被隐藏,因为它超出界限吗? grep输出始终以换行符结束,即使匹配不是:

$ echo ab | grep -o a | xxd -pu
610a

答案 1 :(得分:0)

我从我的grep字符串中删除了度数符号,并在lua中再次附加了我的问题。所以字体不是问题,也不是假设编码不是unicode的小部件。

l0b0 关于以新线结束的结果是对的,它解决了我的第二个问题。