簡體   English   中英

如何直接替換 ISO-8889 字符和十六進制表示?

[英]How to replace ISO-8889 characters and hex representation in direct way?

我有一個 HTML 文件,我想將 ISO-8859-1 代碼轉換為 UTF-8。

有時,在文件中,特殊字符以這種格式出現

&#x200
&#x203

有時,特殊字符以這種格式出現

 È
 Ë

在這兩種情況下,我都想用 HTML 標識替換它們,如下所示:

 È
 Ë

我試過用awk這樣做:

awk '{gsub(/\200/, "\\È" , $0); print}' file

但在這種情況下,僅替換È而不是其等效的&#x200

有沒有辦法在單個/直接命令中替換這些字符,或者需要同時考慮兩種方式? 我的意思是,對每個字符執行以下操作?

awk '{ gsub(/\&#x200/, "\\È" , $0)
       gsub(/\200/,    "\\È" , $0); print}' file

如果有更有效的方法或使用其他工具,我願意接受建議。 提前致謝。

一種方法,使用 perl HTML::Entities模塊(可通過您的操作系統包管理器或 CPAN 如果尚未安裝)轉換所有實體和非 ASCII 字符:

$ cat example.html
<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <p>Testing &#200; and &#203;
    <p>Testing È and Ë
  </body>
</html>
$ file example.html
example.html: HTML document, ISO-8859 text
$ perl -Mopen=IN,":encoding(iso-8859-1)" -MHTML::Entities -ne \
    'print encode_entities(decode_entities($_), "^\n\x20-\x25\x27-\x7e")' example.html
<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <p>Testing &Egrave; and &Euml;
    <p>Testing &Egrave; and &Euml;
  </body>
</html>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM