如何强制pdftohtml输出UTF-8编码 解决指定utf8编码找不到映射文件报错
问题原因
pdftohtml的-enc参数不支持直接传入小写的utf8作为值,该参数需要匹配工具自带的编码映射文件名,所以会提示找不到unicodeMap文件- 你发现
-listenc不是有效选项是因为只有部分分支版本的pdftohtml支持该参数,主流poppler官方版本的pdftohtml没有集成该参数 - 你观测到Vim打开输出文件显示为UTF-8是正常的:最新版poppler提供的
pdftohtml默认输出编码实际就是UTF-8,只是它生成的HTML头里默认不会声明UTF-8编码,才会让你误以为默认编码是ISO-8859-1。
强制输出UTF-8的操作方案
方法1:直接使用默认输出+手动补充编码声明(优先推荐)
现在主流发行版源里安装的poppler-utils包提供的pdftohtml默认输出就是UTF-8,你只需要给生成的HTML手动添加编码声明即可:
- 转换时不加
-enc参数,直接执行:pdftohtml my.pdf output.html - 生成后在HTML的
<head>标签内插入<meta charset="UTF-8">即可,批量处理可以用sed命令一键添加:sed -i '1i <meta charset="UTF-8">' output.html
方法2:指定正确的UTF-8编码映射名称
如果你的pdftohtml版本比较老,需要手动指定编码,传入的参数值应该是大小写正确的UTF-8,如果提示缺少映射文件,先安装poppler-data依赖包:
- Debian/Ubuntu系列安装依赖:
sudo apt install poppler-data - RHEL/CentOS/Fedora系列安装依赖:
sudo dnf install poppler-data - 安装完成后执行转换命令:
pdftohtml -enc "UTF-8" my.pdf
方法3:转码兜底方案
如果以上两种都不生效,可以先让pdftohtml输出默认编码内容,再用iconv强制转码为UTF-8:pdftohtml my.pdf temp.html && iconv -f ISO-8859-1 -t UTF-8 temp.html > output.html
内容的提问来源于stack exchange,提问作者user3310334
相关产品推荐
相关产品推荐

