Символ 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: символ степени °.

И на моей панели задач этот символ отображается как, который сам по себе является символом юникода: U+FFFD, Итак, я предполагаю, что awesome поддерживает Unicode, так почему этот символ отображается неправильно?

РЕДАКТИРОВАТЬ: Кроме того, как побочная проблема, я не могу добавить строку в свой вывод. IE, если я делаю temp_widget:set_text(out .. "foobar"), результат такой же, как temp_widget:set_text(out), Как добавить строку тогда?

2 ответа

Решение

Я решил свою проблему с удалением знака степени из моего grep и добавляя его снова в lua. Таким образом, шрифт не был проблемой, ни виджет, предполагавший, что кодировка не была в юникоде.

l0b0 был прав насчет выхода из новой строки, но это решило мою вторую проблему.

Я считаю, что " " - это не обязательно U+FFFD, но также и общий символ замены для любого символа, который не входит в используемый вами шрифт. Так что проблема может быть просто в поддержке шрифтов. Например, если я захожу на произвольную веб-страницу, заголовок которой содержит знак степени, строка заголовка браузера содержит знак степени. Другая возможность состоит в том, что, поскольку строки Lua не имеют явной кодировки, вам, возможно, придется как-то сообщить виджету, какую кодировку он должен принять для ввода.

Что касается объединения строк, вы уверены, что out не заканчивается новой строкой, в результате чего следующая строка будет скрыта, потому что она выходит за пределы? grep вывод всегда заканчивается новой строкой, даже если совпадения нет:

$ echo ab | grep -o a | xxd -pu
610a
Другие вопросы по тегам