Perl , html 数据和以 utf-8 编码的字符

标签 perl

Perl 初学者。

我制作了一个 Perl 脚本来解析来自 html 站点的数据。我的脚本以 UTF-8 对数据进行编码,其中一个数据包含罗马尼亚字符,因此对数据进行编码会导致字符不正确,例如:

ţ = þ (incorrect); ş = º (incorrect); ă = ã (correct);

从 html 解析的行示例:

Distribuţia: Robert Downey Jr. (Sherlock Holmes) Jude Law (Dr. John Watson) Rachel McAdams (Irene Adler) Mark Strong (Lord Blackwood) Kelly Reilly (Mary Morstan) Eddie Marsan (Inspectorul Lestrade) James Fox (Sir Thomas)

我想将其拆分为:

my ($credits, $line)
foreach $credits (split /(?=\w+:)\s*/, $line) {
...

但是输出,因为“þ”被解释为“非单词字符”(这里换行不正确)是:

Distribuþ
Robert Downey Jr. (Sherlock Holmes)
Jude Law (Dr. John Watson)
Rachel McAdams (Irene Adler)
Mark Strong (Lord Blackwood)
Kelly Reilly (Mary Morstan)
Eddie Marsan (Inspectorul Lestrade)
James Fox (Sir Thomas)

想要的输出(正确):

Distribuţia
Robert Downey Jr. (Sherlock Holmes)
Jude Law (Dr. John Watson)
Rachel McAdams (Irene Adler)
Mark Strong (Lord Blackwood)
Kelly Reilly (Mary Morstan)
Eddie Marsan (Inspectorul Lestrade)
James Fox (Sir Thomas)

如果我使用“\p{Alpha}”变量而不是“\w”,部分解决问题(正确换行,但显示“Distribuþia”而不是“Distribuţia ”,可能发生在其他角色身上)看起来像这样(不正确):

Distribuþia
Robert Downey Jr. (Sherlock Holmes)
Jude Law (Dr. John Watson)
Rachel McAdams (Irene Adler)
Mark Strong (Lord Blackwood)
Kelly Reilly (Mary Morstan)
Eddie Marsan (Inspectorul Lestrade)
James Fox (Sir Thomas)

最佳答案

Text::Unidecode

>perl -MText::Unidecode -E"say unidecode qq{rom\x{00E2}n\x{0103}}"
romana

关于Perl , html 数据和以 utf-8 编码的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7395905/

相关文章:

linux - 如何删除与另一个文件中的元素匹配的行

ajax - 如何使用 HTML::FormFu 进行 jQuery AJAX 表单验证?

perl - 防止 perl 打印换行符

macos - CPAN 安装几乎无法在 Mac 上运行,这正常吗?

perl - 在 Perl 中执行多线程时应该查看哪些模块?

perl - 在perl中随机化矩阵,保持行和列的总数相同

linux - 尝试在 Linux 上使用 Perl 读取 pdf、解析数据并将所需数据写入电子表格

perl - 如何使用 Perl 解析 IP 地址和地址范围?

XML::Twig 正在为多行中提供的值添加空换行符

perl - 使用 perl 编写的 gui 应用程序的身份验证