使用Emacs将非ASCII字符替换为SGML实体代码

时间:2013-09-06 08:15:35

标签: html xml emacs html-entities sgml

我有一个带有一些非ASCII字符的HTML文件,比如用UTF-8或UTF-16编码。要以ASCII格式保存文件,我想用它们的(SGML / HTML / XML)实体代码替换它们。例如,每个ë应变为ë,每个应变为◊。我该怎么做?

我使用Emacs作为编辑器。我确定它有替换功能,但我找不到它。我错过了什么?或者我如何自己实现它?

2 个答案:

答案 0 :(得分:2)

我认为您正在寻找iso-iso2sgml

答案 1 :(得分:2)

有一个character class,其中包含完全ASCII字符集。您可以使用与其补码匹配的正则表达式来查找非ASCII字符的出现,然后使用elisp将它们替换为代码:

M-x replace-regexp RET
[^[:ascii:]] RET
\,(concat "&#" (number-to-string (string-to-char \&)) ";") RET

例如,当á匹配时:\&"á"string-to-char将其转换为(=数字225), number-to-string将其转换为"225"。然后,concat连接"&#""225"";"以获取"á",这将取代原始匹配。

使用C-x (C-x )围绕这些命令,并像往常一样应用C-x C-k nM-x insert-kbd-macro来制作一个功能。


要查看以交互方式调用此函数的elisp等效项,请运行该命令,然后按C-x M-:(重复复杂命令)。

一个更简单的版本,没有考虑活动区域,可能是:

(while (re-search-forward "[^[:ascii:]]" nil t)
  (replace-match (concat "&#"
                         (number-to-string (string-to-char (match-string 0)))
                         ";")))

(这使用recommended way以编程方式进行搜索+替换。)