将unicode代码点转换为irssi中的特定字符串

时间:2017-04-20 12:54:31

标签: perl unicode irssi

是否有命令/设置/脚本将某些unicode代码点转换为irssi中的其他字符串?具体来说,我想将表情符号代码点转换为ASCII表情符号,因为我的字体不支持它们。这主要适用于facebook messenger插件。我已经尝试为此创建一个perl脚本,但文档有点稀疏。

1 个答案:

答案 0 :(得分:1)

所以,问题在于我的irssi有点过时,错误已经修复,实际上很容易实现。对于任何想要做同样事情的人来说,你需要这样的东西:

my %hash = (
    0x1f600 => ':)',
    # add smileys to taste here
);

sub transform ($$$$$$) {
    my ($server, $msg, $nick, $address, $target) = @_;
    my $transformed = '';

    $msg = decode('utf8', $msg);

    for (my $l = length($msg), my $i = 0; $i < $l; $i++) {
        my $chr = substr($msg, $i, 1);
        my $code = ord($chr);

        if (defined $hash{$code}) {
            $transformed .= $hash{$code};
        }
        else {
            $transformed .= $chr;
        }
    }
    Irssi::signal_continue($server, $transformed, $nick, $address, $target);
}

Irssi::signal_add_last('message public', 'transform');
Irssi::signal_add_last('message private', 'transform');

请注意,我绝对不是Perl专家,因此可能有更智能/更好的方法来实现这一目标!