bash:将html实体转换为UTF-8,但保留现有的UTF-8

q3qa4bjr  于 2023-04-10  发布在  其他
关注(0)|答案(2)|浏览(180)

就像this question一样,我需要将html实体(例如&)转换为UTF-8(&),同时忽略其他UTF-8字符。不同之处在于,在我的情况下,我需要通过bash命令行完成此操作。
我可以使用像recode这样的工具并运行echo '&' | recode html..utf-8,它可以很好地转换为&,但是字符串中有UTF-8字符,比如

echo 'Arabic & ٱلْعَرَبِيَّة' | recode html..utf-8

我得到:

Arabic & Ù±ÙÙعÙرÙبÙÙÙÙØ©

当然,这不是我需要的。它应该在最后看起来像这样:

Arabic & ٱلْعَرَبِيَّة

有没有一种方法可以做到这一点,而不需要一堆混乱和看似无穷无尽的正则表达式?谢谢

rmbxnbpk

rmbxnbpk1#

perl一行程序:

$ echo 'Arabic & ٱلْعَرَبِيَّة' | perl -CS -MHTML::Entities -ne 'print decode_entities($_)' 
Arabic & ٱلْعَرَبِيَّة

需要HTML::Entities模块,它是较大的HTML::Parser捆绑包的一部分。通过您的操作系统包管理器或常用的CPAN客户端安装。

gpnt7bae

gpnt7bae2#

我在尝试使用recode重新编码葡萄牙语文本时遇到了类似的问题。出现这个问题是因为recode假设输入文本是用ISO-8859-1 (Latin Alphabet Number 1)编码的。
为了解决这个问题,我在一个序列中使用了recode 2次。
请参阅葡萄牙语示例:

echo 'Isto é uma simulação.' | recode --diacritics UTF-8..HTML | recode HTML..UTF-8;
Isto é uma simulação.

请注意,我使用--diacritics来忽略像&<>'这样的字符。防止&字符被转换为&amp;是非常重要的。文档不清楚,但你可以在源代码中看到它。
在第一个recode命令中,带有diacritics的字母被转换为它们对应的HTML实体:

echo 'Isto é uma simulação.' | recode --diacritics UTF-8..HTML;
Isto &eacute; uma simula&ccedil;&atilde;o.

请注意,é被替换为&eacute;('e'与acute accent)。
第二个recode命令将HTML实体转换为UTF-8:

echo 'Isto &eacute; uma simula&ccedil;&atilde;o.' | recode HTML..UTF-8;
Isto é uma simulação.

请注意,&eacute;已替换为é
您的示例如下所示:

echo 'Arabic &amp; ٱلْعَرَبِيَّة' | recode --diacritics UTF-8..HTML | recode HTML..UTF-8 
Arabic & ٱلْعَرَبِيَّة

相关问题