i3blocks电池脚本,使用字体awesome不能与某些unicodes一起使用

apo*_*poc 6 unicode perl icons font-awesome

我使用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
Run Code Online (Sandbox Code Playgroud)

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

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 .= ' ? ';
}
Run Code Online (Sandbox Code Playgroud)

if ($status eq 'Discharging') {

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

if ($percent < 5) {
    exit(33);
}
}
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

如何使用fa-battery-half Unicode: f242图标让脚本工作.

ike*_*ami 5

你有两个问题.


您的第一个问题是导致"广泛字符"警告和可能的其他问题的错误.要解决该错误,请对输出进行正确编码.具体来说,将以下内容添加到脚本中:

use open ':std', ':encoding(UTF-8)';
Run Code Online (Sandbox Code Playgroud)

这告诉Perl

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

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


你的第二个问题是你的终端的字体没有U + F242的字形.如果要显示该字符,则需要使用其他字体.