我有一个带有一些非ASCII字符的HTML文件,比如用UTF-8或UTF-16编码。要以ASCII格式保存文件,我想用它们的(SGML / HTML / XML)实体代码替换它们。例如,每个ë
应变为ë
,每个◊
应变为◊
。我该怎么做?
我使用Emacs作为编辑器。我确定它有替换功能,但我找不到它。我错过了什么?或者我如何自己实现它?
答案 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 n
和M-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以编程方式进行搜索+替换。)