使用 perl 比较两个 Unicode 字符串

2024-05-10

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

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");
}

这工作得很好。eq and ne将逐个代码点比较字符串的代码点。

某些字素(例如“é”)可以通过多种不同的方式构建,因此您可能必须正常化 http://search.cpan.org/perldoc?Unicode::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");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 perl 比较两个 Unicode 字符串 的相关文章

随机推荐

  • 第99章 啤酒瓶递归好像不行

    好的 这是我在学习过程中编写的简单代码 void SingTheSong int NumOfBottles if NumOfBottles 0 printf there are simply no more bottles of beer
  • 如何使用 ActiveAdmin 创建 STI 子类的对象

    给出以下设置 当前不起作用 class Employee lt ActiveRecord Base end class Manager lt Employee end ActiveAdmin register Employee do for
  • 销毁Android应用程序

    我开发了一个运行良好的应用程序 我使用了一些静态变量并设置了应用程序级别变量 我的问题是 即使在每个活动上设置 finish 之后 应用程序仍显示在运行模式下 关闭应用程序后 当我在一段时间后启动应用程序时 它将设置最后的更改 我怎样才能销
  • Android TCP Server 仅在客户端关闭后显示来自 Python 客户端的消息

    我正在使用一些示例代码 它允许我从 Python 客户端向 Android 服务器 TCP 发送消息 但该消息仅在客户端关闭后才会显示在 Android 模拟器上 我可能缺少 tcp 套接字背后的一些基本理解 第一次使用和实现 我的主要目的
  • 我所有的布局 xml 文件都变成了自动生成的文件

    昨天我的应用程序上的所有内容都运行完美 但今天当我打开 Android Studio 时 所有 xml 文件都已损坏 不确定这是否是正确的术语 每个人都是这样的 我今天遇到了同样的问题 下面是我所做的几个步骤 我取得了成功来解决这个问题 只
  • alloca 函数作用域中的 goto 有效吗?

    C 标准禁止转到存在 VLA 的函数作用域 VLA 和对 alloca 函数的调用在低级别上应该具有相同的结果 我可能是错的 因为我只是一个 C 不是一个低级程序员 但在我的想象中这似乎很机智 那么下面的代码片段也会是未定义的行为吗 int
  • 反转 ArrayList 最简单的方法是什么?

    反转这个ArrayList的最简单方法是什么 ArrayList
  • 元标记内的属性 property="og:title" 是什么?

    我有网站源代码的摘录 这是做什么的属性属性代表什么 其目的是什么 og title是开放图元标签之一 og 属性定义社交图中的对象 例如 Facebook 使用它们 og title代表对象的标题 因为它应该出现在图表中 请参阅此处了解更多
  • 如果两个数组包含相同的元素,无论这些元素出现的顺序如何,如何在 Swift 中检查?

    假设有两个数组 var array1 a b c var array2 b c a 我希望这两个数组的比较结果为真 以下 var array1 a b c var array2 b c a d 是假的 我怎样才能在 Swift 中实现这一点
  • ruby 中的数组切片返回不同的结果 - nil 与空数组

    我对以下事实感到困惑 如果对数组进行切片length 它返回一个空数组 但长度大于该值时 它返回nil 这是什么原因呢 例如 arr 1 2 3 4 5 这样做 在哪里y gt arr length and x是任意正整数 返回nil ar
  • 不可靠网络和低带宽的 Java ORM 策略

    我正在寻找 Hibernate 作为需要在不可靠网络中工作的系统 我们需要对一个中央数据库进行读写访问 但它可以通过一个相当不稳定的 Wi Fi 网络来访问 此外 可能会出现断电而导致应用程序无法完全关闭的情况 因此任何解决方案都必须具有能
  • PHP三元运算符错误[重复]

    这个问题在这里已经有答案了 可能的重复 PHP 三元运算符未按预期工作 https stackoverflow com questions 14214427 php ternary operator not working as expec
  • C# 自动检测代理设置

    C 2008 SP1 我正在使用代码来检测是否已在 Internet 选项 下设置代理 如果有代理 那么我将在我的网络客户端中设置它 所以我只是检查代理的地址是否存在 如果没有 则说明 Web 客户端中没有要设置的代理 这是执行此操作的正确
  • 在java中以一定精度显示双精度数

    我目前正在编写一个计算器应用程序 我知道双精度数并不是良好数学的最佳选择 应用程序中的大多数函数都具有很高的精度 但有些函数不会得到非常难看的结果 我的解决方案是只向用户显示 12 位小数的精度 我选择 12 是因为我的最低精度来自我的数值
  • 使用计数器作为变量名称的一部分来访问变量

    我尝试做类似的事情 cat1 array hello everyone cat array bye everyone for index 0 index lt 2 index echo cat index 1 当然是行不通的 我需要在这里改
  • 打印总和时出现“内置方法总和”奇怪的消息

    使用 Python NumPy 计算矩阵的列之和 import numpy from StringIO import StringIO fileName test2 csv myFile open fileName r print Read
  • scipy.sparse.hstack(([1], [2])) ->“ValueError:块必须是二维的”。为什么?

    scipy sparse hstack 1 2 and scipy sparse hstack 1 2 工作得很好 但不是scipy sparse hstack 1 2 为什么会这样呢 这是我的系统上发生的情况的痕迹 C Anaconda
  • 使用“Any CPU”而不是“X86”编译wix项目

    当我编译一个wix项目 并且wix通过MSbuild启动所有现有项目的编译时 我可以使用 任何CPU 而不是 X86 或 64位 吗 如果没有 我如何使用 任何CPU 编译项目 如果您的问题是是否可以编译 WIXPROJAny CPU那么答
  • Python statsmodel.api 逻辑回归 (Logit)

    所以我尝试使用 python 的 statsmodels api 对二进制结果进行逻辑回归进行预测 我按照教程使用 Logit 当我尝试对测试数据集进行预测时 每个记录的输出都是 0 到 1 之间的小数 它不应该给我零和一吗 或者我是否必须
  • 使用 perl 比较两个 Unicode 字符串

    当我运行以下代码时 它不会进入 在此处执行某些操作 部分 my a P 3 lt 1 my b P 3 lt 1 if a ne b do something here 还有另一种方法可以将 Unicode 字符串与 perl 进行比较吗