我有包含 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/