我有包含 emoji unicode 字符的文本文件,例如😤、☹️、😔、😅、😃、😉、😜、😍。

例如代码\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 ";
    }
}

第一段代码有什么问题
问候

最佳答案

如果您查看 perldoc perlre\N ,您会看到它的意思是“命名的 Unicode 字符或字符序列”。

您可以改用它:

if ($ligne =~ m/\N{U+1F60D}/)
# or
if ($ligne =~ m/\x{1F60D}/)

编辑:它也在您发布的链接中进行了描述,
https://perldoc.perl.org/perluniintro.html

编辑:
您阅读的内容可能未解码。你要:
use Encode;
...
my $ligne = decode_utf8 $_;

或者直接在utf8模式下直接打开文件:
open my $fh, "<:encoding(UTF-8)", $filename or die "Could not open $filename: $!";
while (my $ligne = <$fh>) {
    if ($ligne =~ m/\N{U+1F60D}/) { ... }
}

您从未展示过如何打开名为 FIC 的文件句柄,所以我认为它是 utf8 解码的。
这是另一个关于 perl unicode 的好教程:https://perlgeek.de/en/article/encodings-and-unicode

关于perl - 如何在 Perl 中将表情符号检测为 unicode?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47924985/

10-16 11:46