如何解码HTML实体?
下面是一个简单的Perl问题: 如何转换HTML特殊字符,如如何解码HTML实体?,html,perl,ascii,special-characters,Html,Perl,Ascii,Special Characters,下面是一个简单的Perl问题: 如何转换HTML特殊字符,如ü或'到普通ASCII文本 我是这样开始的: s/\&#(\d+);/chr($1)/eg; 可以为所有HTML字符编写,但是像这样的函数可能已经存在了 请注意,我不需要完整的HTML->文本转换器。我已经用HTML::Parser解析了HTML。我只需要用我得到的特殊字符转换文本。看一下: 您可以猜测输出。有一些预定义的HTML实体-&“等等-您可以硬编码 然而,更大的数字实体案例-{;-将更加
ü代码>或'代码>到普通ASCII文本
我是这样开始的:
s/\&#(\d+);/chr($1)/eg;
可以为所有HTML字符编写,但是像这样的函数可能已经存在了
请注意,我不需要完整的HTML->文本转换器。我已经用HTML::Parser
解析了HTML。我只需要用我得到的特殊字符转换文本。看一下:
您可以猜测输出。有一些预定义的HTML实体-&代码>“
等等-您可以硬编码
然而,更大的数字实体案例-{;
-将更加困难,因为这些值是,转换为ASCII将从困难到不可能。注意,也有十六进制指定字符。它们看起来像这样:é;(é)
使用HTML::Entities的decode_实体将实体转换为实际字符。将其转换为ASCII需要更多的工作。我使用了iconv(perl接口:Text::iconv)
使用音译选项在过去取得了一些成功。但是如果你正在处理
使用有限的一组实体,或者您实际上不需要将其简化为ASCII等价物,
您最好限制decode_实体生成的内容或为其提供自定义内容
转换映射。请参阅HTML::Entities文档。上述答案告诉您如何将实体解码为Perl字符串,但您也询问了如何将其转换为ASCII
假设这真的是您想要的,并且您不想要所有的unicode字符,您可以查看CPAN模块,将所有这些奇怪的字符转换回大致相似的ASCII字符集合:
use Text::Unidecode qw(unidecode);
use HTML::Entities qw(decode_entities);
my $source = '北亰';
print unidecode(decode_entities($source));
# That prints: Bei Jing
我使用这个脚本。将它另存为html2utf.py
,并使用它alaecho$some|html | html2utf.py
#!/usr/bin/env python3
"""
An alternative for `perl -Mopen=locale -MHTML::Entities -pe '$_ = decode_entities($_)'` (which you can use by `cpanm HTML::Entities`) and `recode html..`.
"""
import fileinput
import html
for line in fileinput.input():
print(html.unescape(line.rstrip('\n')))
完全正确,贝文。没有从Unicode到“纯ASCII”的反向翻译。乔尔写了一篇关于文本编码的非常好的文章,德尔曼应该读一下……所有关于“纯文本=ASCII=字符”的东西都是8位的“这不仅是错误的,而且是无可救药的错误,如果你仍然以这种方式编程,你也不比一个不相信细菌的医生强多少。”Perl:…为那些喜欢CLI的人带来了困难:Perl-MHTML::Entities-le'print decode_Entities(¿;&39;”)
#!/usr/bin/env python3
"""
An alternative for `perl -Mopen=locale -MHTML::Entities -pe '$_ = decode_entities($_)'` (which you can use by `cpanm HTML::Entities`) and `recode html..`.
"""
import fileinput
import html
for line in fileinput.input():
print(html.unescape(line.rstrip('\n')))