1

我编写了一个 perl 脚本,它使用 CAM PDF 模块从 pdf 文件中提取 PDF 元数据。然后我使用 DBI 将这些数据插入 MySQL。我遇到了一个包含特殊字符的 PDF 文件。我可以确认 MySQL 模式和数据库表设置为 UTF8。我将 perl 脚本设置为使用 utf8use utf8;我也将 DBI 连接设置为使用它mysql_enable_utf8 => 1

我现在可以保存一些符号(版权、注册),但商标符号被转换为撇号/重音符号。我读到该设置$dbh->do('SET NAMES utf8')将有助于解决此问题,但在我的场景中,它会在第一次遇到符号后剪切所有文本。

我猜问题是来自 PDF 的文本设置为另一种编码格式,而不是 UTF8。我尝试使用use Encoding模块对这些字符串进行解码/编码,并将符号转换为文本。当使用 php 将该文本输出到网页时,它显示为文本而不是符号。

4

1 回答 1

2

添加到use utf8这里不相关...... PDF元数据使用特殊的PDFDocEncoding(或UTF-16BE,如果PDFDocEncoding不够,但那不是你的情况),其中商标是十进制146 - 这是CP1252中的quoteright,这就是你得到。因为CAM::PDF不进行任何解码(既不是PDF::API2,顺便说一句)并返回原始字节。你必须自己解码它们。但是,对于元数据提取的简单任务,您可以使用Image::ExifTool,它表示它会自动从 PDFDocEncoding 解码。

于 2013-10-21T12:48:08.477 回答