i3blocks 电池脚本,使用很棒的字体不适用于某些 unicode

i3blocks battery script, using font awesome doesn't work with some unicodes

我使用 font-awesome 4.4.0 并使用新的电池图标扩展了默认的 i3blocks 电池脚本。 一切似乎都正常工作,但 fa-battery-half Unicode: f242 使脚本无用。 unicode 似乎也指字符 .

在终端中崩溃:

$ perl /usr/share/i3blocks/battery
Wide character in print at /usr/share/i3blocks/battery line 65.
28%  (01:02)
Wide character in print at /usr/share/i3blocks/battery line 66.
28%  
#000000

脚本是默认的,除了以下几行:

if ($status eq 'Discharging') {

if ($percent < 10) {
    $full_text .= '  ';
} elsif ($percent < 25) {
    $full_text .= '  ';
} elsif ($percent < 50) {
    $full_text .= '  ';
} elsif ($percent < 75) {
    $full_text .= '  ';
} elsif ($percent < 100) {
    $full_text .= '  ';
}

} elsif ($status eq 'Charging') {
    $full_text .= '  ';
}

if ($status eq 'Discharging') {

if ($percent < 25) {
    print "#FF003C\n";
} else {
    print "#000000\n";
}

if ($percent < 5) {
    exit(33);
}
}

在编辑器中,脚本如下所示:

如何使用 fa-battery-half Unicode: f242 图标让脚本运行。

你有两个问题。


您的第一个问题是导致 "wide character" 警告和其他可能问题的错误。要解决错误,请正确编码您的输出。具体来说,将以下内容添加到您的脚本中:

use open ':std', ':encoding(UTF-8)';

这告诉 Perl

  • 使用 UTF-8 对发送到 STDOUT 的文本进行编码。
  • 使用 UTF-8 对发送到 STDERR 的文本进行编码。
  • 使用 UTF-8 解码从 STDIN 读取的文本。
  • 使用 UTF-8 作为文件的默认编码。

警告表明 Perl 能够注意到您的错误,并且它试图通过使用 UTF-8 对输出进行编码来修复它。这是正确的修复,所以你的程序的输出不会改变,这给我们带来了第二个问题。


你的第二个问题是你的终端字体没有 U+F242 的字形。如果您希望显示该字符,则需要使用不同的字体。