首页 > 解决方案 > bash:将 html 实体转换为 UTF-8,但保留现有的 UTF-8

问题描述

就像这个问题一样,我需要将 html 实体(例如&)转换为 UTF-8(&),同时忽略其他 UTF-8 字符。不同之处在于,就我而言,我需要通过 bash 命令行执行此操作。

我可以使用类似recodeand run之类的工具,echo '&' | recode html..utf-8它可以转换为&就好了,但是在字符串中使用 UTF-8 字符,例如

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

我得到:

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

当然,这不是我需要的。最后应该是这样的:

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

有没有办法做到这一点,而不需要一堆凌乱且看似无穷无尽的正则表达式?谢谢

标签: htmlbashcommand-lineutf-8

解决方案


perl 单行:

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

需要HTML::Entities模块,该模块是较大的HTML::Parser包的一部分。通过您的操作系统包管理器或最喜欢的 CPAN 客户端安装。


推荐阅读