Символ 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