通过iconv在Linux上转换编码

4
我曾经使用iconv来转换编码,但今天我遇到了一些新的东西。为了让我的问题更清晰,我制作了一个测试用例。
目标是将الحلقة الثالثة转换为其UTF8版本: الحلقة الثالثة。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title> this text is from arabic language   </title>
</head>
<body>
<p><span> &#1575;&#1604;&#1581;&#1604;&#1602;&#1577; &#1575;&#1604;&#1579;&#1575;&#1604;&#1579;&#1577;</span></p>
</body>
</html>

尝试使用编码方式,如ASCII,LATIN1,windows-1252,但没有成功。我该如何确定这种编码类型以进行转换? Google翻译和Stackoverflow编辑器都能够检测并转换它? 另一个例子:如果我勾选“假定HTML(默认:处理为纯文本)”,则此网站http://kanjidict.stc.cx/recode.php能够正确转换编码。 我错过了什么,这三个网站是如何正确转换编码的?
4个回答

6

好的,经过一天的工作,我发现了我失踪的命令,它是一个我已经安装的叫做 ascii2uni 的包。

只需使用以下命令即可安装:sudo apt-get install ascii2uni

经过一些测试,我能够使用以下命令将一个文件转换为 Unicode:

ascii2uni -a D source.html > target.html

并且我可以使用仅命令行来进行转换。

干杯!


2

这个想法是字符串替换。使用 Python3 编码。

仅解析十进制数:

>>> import re
>>> s = r'&#65;&#223;&#254;'
>>> r = re.compile(r'&#(\d+);')
>>> r.sub(lambda m:chr(int(m.group(1))), s)
'Aßþ'

解析十六进制和十进制:

>>> import re
>>> s = r'&#x41;&#223;&#xFE;'
>>> r = re.compile(r'&#(x?)(\w+);')
>>> r.sub(lambda m:chr(int(m.group(2), 10 if not m.group(1) else 16)), s)
'Aßþ'

1

抱歉,我正在寻找类似于我上面回答的CLI命令,感谢您的回答。 - tawfekov

1
recode html..utf8

这也应该有效,但请确保您阅读了recode的使用手册,如果没有另行说明,它会在原地重新编码文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接