如何在Perl中检测表情符号作为unicode?

时间:2017-12-21 12:26:12

标签: perl unicode emoji

我有包含emoji unicode caracter的文本文件,例如,☹️,,,,,,。

例如代码\ N {1F60D}对应 我使用推荐,如https://perldoc.perl.org/perluniintro.html部分创建Unicode。 我的程序必须检测它们并做一些治疗,但如果我使用

open(FIC1, ">$fic");

while (<FIC>) {
my $ligne=$_;

if( $ligne=~/\N{1F60D}/  )
{print "heart ";
    }
}

现在我这样做,它起作用

open(FIC1, ">$fic");

while (<FIC>) {
my $ligne=$_;

if( $ligne=~//  )
{print "Heart ";
    }
}

第一个代码有什么问题  此致

3 个答案:

答案 0 :(得分:7)

如果查看\N if ($ligne =~ m/\N{U+1F60D}/) # or if ($ligne =~ m/\x{1F60D}/) ,您会发现它的意思是“命名为Unicode字符或字符序列”。

您可以改用:

use Encode;
...
my $ligne = decode_utf8 $_;

编辑:您在发布的链接中也有描述,  perldoc perlre

编辑: 您阅读的内容可能未被解码。你想要:

open my $fh, "<:encoding(UTF-8)", $filename or die "Could not open $filename: $!";
while (my $ligne = <$fh>) {
    if ($ligne =~ m/\N{U+1F60D}/) { ... }
}

或直接以utf8模式打开文件:

FIC

你从未展示过如何打开名为console.log的文件句柄,所以我认为它是utf8解码的。 这是关于perl中的unicode的另一个很好的教程:https://perldoc.perl.org/perluniintro.html

答案 1 :(得分:7)

为了检测表情符号,我会在正则表达式中使用unicode属性,例如:

  • \p{Emoticons}
  • \p{Block: Emoticons}

例如,只打印出表情符号

perl -CSDA -nlE 'say for( /(\p{Emoticons})/g )' <<< 'abcαβγ'

将打印




有关详细信息,请参阅perluniprops

答案 2 :(得分:2)

使用perl -C可用于启用unicode功能

perl -C -E 'say "\N{U+263a}"'|perl -C -ne 'print if /\N{U+263a}/'

from perl run

  

-C [number / list]

     

-C标志控制一些Perl Unicode功能。   ...

第二个代码的工作原理是perl匹配UTF-8二进制序列:如perl -ne 'print if /\xf0\x9f\x98\x8d/'中那样。

以下应该工作

#!/usr/bin/perl -C
open(FIC1, ">$fic");

while (<FIC>) {
    my $ligne=$_;

    if( $ligne=~/\N{U+1F60D}/  ) {
        print "heart ";
    }
}