gpt4 book ai didi

perl - 用 perl 比较两个 Unicode 字符串

转载 作者:行者123 更新时间:2023-12-04 16:48:32 24 4
gpt4 key购买 nike

当我运行以下代码时,它不会进入“在此处执行操作”部分:

my $a ='µ╫P[┐╬♣3▀═<+·1╪מ└╖"ª';
my $b ='µ╫P[┐╬♣3▀═<+·1╪מ└╖"ª';

if ($a ne $b) {
# do something here
}

还有另一种方法可以将 Unicode 字符串与 perl 进行比较吗?

最佳答案

如果您有两个 Unicode 字符串(即 Unicode 代码点字符串),那么您肯定已将文件保存为 UTF-8,并且实际上

use utf8;  # Tell Perl source code is UTF-8.

my $a = 'µ╫P[┐╬♣3▀═<+·1╪מ└╖"ª';
my $b = 'µ╫P[┐╬♣3▀═<+·1╪מ└╖"ª';

if ($a eq $b) {
print("They're equal.\n");
} else {
print("They're not equal.\n");
}

这工作得很好。 eqne将逐个代码点比较字符串代码点。

某些字素(例如“é”)可以通过多种不同的方式构建,因此您可能必须 normalize他们的代表首先。
use utf8;  # Tell Perl source code is UTF-8.

use charnames qw( :full ); # For \N{}
use Unicode::Normalize qw( NFC );

my $a = NFC("\N{LATIN SMALL LETTER E WITH ACUTE}");
my $b = NFC("e\N{COMBINING ACUTE ACCENT}");

if ($a eq $b) {
print("They're equal.\n");
} else {
print("They're not equal.\n");
}

最后,Unicode 认为某些字符几乎相等,并且可以使用不同形式的规范化将它们视为相等。
use utf8;  # Tell Perl source code is UTF-8.

use charnames qw( :full ); # For \N{}
use Unicode::Normalize qw( NFKC );

my $a = NFKC("2");
my $b = NFKC("\N{SUPERSCRIPT TWO}");

if ($a eq $b) {
print("They're equal.\n");
} else {
print("They're not equal.\n");
}

关于perl - 用 perl 比较两个 Unicode 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9574198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com